【Rails・MySQL】MySQLのデータ型とRailsのマイグレーションファイルのデータ定義の対応まとめ

マイグレーションファイルの作成業務をしていて、MySQLとの基本的な対応は解ったけど、
TinyIntとかMidiumTextってどうやって指定するの？となったので、対応を簡単にまとめました。

#軽く検証

こんなマイグレーションファイルを実行して

```
class CreateMigrationTest < ActiveRecord::Migration
  def change
    create_table :migration_tests,id:false do |t|
        t.string :string
        t.string :string_limit, :limit => 10 # limit => 数値でlimitを指定
        t.string :string_nonnull, null:false #null:boolean で nullの可否を指定
        t.text :tiny_text, :limit => 255 #limitの範囲が1~255でTINYTEXT
        t.text :text #何も指定しない、又はlimitの範囲が256~65535でTEXT
        t.text :medium_text, :limit => 16777215 # limitの範囲が65536~16777215でMEDIUMTEXT
        t.text :long_text, :limit => 4294967295 # limitの範囲が16777216 ~ 4294967285でLONGTEXT
        t.float :float
        t.float :double, :limit => 53 # limitの範囲が24~53でdouble
        t.integer :tinyint,:limit => 1
        t.integer :int, :limit => 4
        t.integer :bigint, :limit => 8
        t.decimal :decimal;
        t.decimal :decimal_option, precision: 15, scale: 3,null:false
        t.datetime :datetime
        t.time :time
        t.date :date
        t.binary :tiny_blob, :limit => 256 #256Byte以下はvarvinary
        t.binary :blob #指定なし(64KB以下)はBROB
        t.binary :medium_blob, :limit => 15.megabytes #16MB以下はMEDIUMBROB
        t.binary :long_blob, :limit => 3.gigabytes #4GB以下はLONGBROB
        t.boolean :boolean
        t.column :primary, 'VARCHAR(30) PRIMARY KEY' # 他対応していないものはcolumnを使う
    end
  end
end
```

作成されたテーブルを確認すると、こうなる

```
mysql> desc migration_tests;

+----------------+----------------+------+-----+---------+-------+
| Field          | Type           | Null | Key | Default | Extra |
+----------------+----------------+------+-----+---------+-------+
| string         | varchar(255)   | YES  |     | NULL    |       |
| string_limit   | varchar(10)    | YES  |     | NULL    |       |
| string_nonnull | varchar(255)   | NO   |     | NULL    |       |
| tiny_text      | tinytext       | YES  |     | NULL    |       |
| text           | text           | YES  |     | NULL    |       |
| medium_text    | mediumtext     | YES  |     | NULL    |       |
| long_text      | longtext       | YES  |     | NULL    |       |
| float          | float          | YES  |     | NULL    |       |
| double         | double         | YES  |     | NULL    |       |
| tinyint        | tinyint(4)     | YES  |     | NULL    |       |
| int            | int(11)        | YES  |     | NULL    |       |
| bigint         | bigint(20)     | YES  |     | NULL    |       |
| decimal        | decimal(10,0)  | YES  |     | NULL    |       |
| decimal_option | decimal(15,3)  | NO   |     | NULL    |       |
| datetime       | datetime       | YES  |     | NULL    |       |
| time           | time           | YES  |     | NULL    |       |
| date           | date           | YES  |     | NULL    |       |
| tiny_blob      | varbinary(256) | YES  |     | NULL    |       |
| blob           | blob           | YES  |     | NULL    |       |
| medium_blob    | mediumblob     | YES  |     | NULL    |       |
| long_blob      | longblob       | YES  |     | NULL    |       |
| boolean        | tinyint(1)     | YES  |     | NULL    |       |
| primary        | varchar(30)    | NO   | PRI | NULL    |       |
+----------------+----------------+------+-----+---------+-------+

```


#対応表
| MySQL | Rails |
|:-----------|------------:|
| varchar(255) | string |
| varchar(文字数) | string #limitで文字数を指定  |
| tinytext | text #limitの範囲が1~255 |
| text | text|
| midiumtext | text #limitの範囲が65536~16777215|
| longtext | text  #limitの範囲が16777216 ~ 4294967285 |
| float | float |
| double | float #limitの範囲が24~53 |
| tinyint | integer #limitが1 |
| smallint | integer #limitが2 |
| int | integer #limitが4 |
| bigint | integer #limitが8 |
| decimal | decimal |
| decimal(M,D) | decimal #precision: M, scale: D
| datetime | datetime |
| time | time |
| date | date |
| blob | binary |
| mediumblob | binary #limitが16MB以下
| longblob | binary #limitが4GB以下
| tinyint(1) | boolean |
| その他 | columnで対応? |

以上です。
間違ってる箇所、追記すべき箇所があればコメントください。