私の歴史と今

振り返ると恥ずかしくなるのが私の歴史。だけどそのときは真面目に書いていた訳でね。そんな今の私を書いていく。

Railsのマイグレーションのデータ型とMySQLのデータ型の対応

Rails 2.3.5で、下記を実行。(実際は一行)

> ruby script/generate model test 
  binary_col    :binary 
  boolean_col   :binary 
  date_col      :date 
  datetime_col  :datetime 
  float_col     :float 
  integer_col   :integer 
  string_col    :string 
  text_col      :text 
  timestamp_col :timestamp

結果

mysql> desc tests;
+---------------+---------------+------+-----+---------+----------------+
| Field         | Type          | Null | Key | Default | Extra          |
+---------------+---------------+------+-----+---------+----------------+
| id            | int(11)       | NO   | PRI | NULL    | auto_increment |
| binary_col    | blob          | YES  |     | NULL    |                |
| boolean_col   | tinyint(1)    | YES  |     | NULL    |                |
| date_col      | date          | YES  |     | NULL    |                |
| datetime_col  | datetime      | YES  |     | NULL    |                |
| decimal_col   | decimal(10,0) | YES  |     | NULL    |                |
| float_col     | float         | YES  |     | NULL    |                |
| integer_col   | int(10)       | YES  |     | NULL    |                |
| string_col    | varchar(255)  | YES  |     | NULL    |                |
| text_col      | text          | YES  |     | NULL    |                |
| time_col      | time          | YES  |     | NULL    |                |
| timestamp_col | datetime      | YES  |     | NULL    |                |
| created_at    | datetime      | YES  |     | NULL    |                |
| updated_at    | datetime      | YES  |     | NULL    |                |
+---------------+---------------+------+-----+---------+----------------+
  • マジックカラム(id, created_at, updated_at)
  • datetimeもtimestampも、MySQLのdatetimeに関連づいている。
  • booleanは、tinyint(1)に関連づいている。
  • varcharのデフォルトは255桁。
  • idは、11桁。

MySQLでは、秒未満を記憶できない。