マイグレーションファイルの作成業務をしていて、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で対応? |
以上です。
間違ってる箇所、追記すべき箇所があればコメントください。