🖥
Rails — マイグレーションで integer カラムを作る時の :limit は、桁数指定ではない ( バイト数指定だ )
結論
表題のとおり。
string 型とは勝手が違う。
検証
テストのために。integer 型で、limit: 1
から limit: 8
までカラムを作ってみる。
db/migrate/xxxxxxxxxxx_integer_tests.rb
class IntegerTests < ActiveRecord::Migration
def change
create_table :integer_tests do |t|
t.integer :integer1, limit: 1
t.integer :integer2, limit: 2
t.integer :integer3, limit: 3
t.integer :integer4, limit: 4
t.integer :integer5, limit: 5
t.integer :integer6, limit: 6
t.integer :integer7, limit: 7
t.integer :integer8, limit: 8
end
end
end
マイグレーションを実行する。
$ rake db:migrate
MySQLでデータ型を確認する。
mysql> desc integer_tests;
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| integer1 | tinyint(4) | YES | | NULL | |
| integer2 | smallint(6) | YES | | NULL | |
| integer3 | mediumint(9) | YES | | NULL | |
| integer4 | int(11) | YES | | NULL | |
| integer5 | bigint(20) | YES | | NULL | |
| integer6 | bigint(20) | YES | | NULL | |
| integer7 | bigint(20) | YES | | NULL | |
| integer8 | bigint(20) | YES | | NULL | |
+----------+------------------+------+-----+---------+----------------+
すると。limit: 5
以上で設定したカラムは、すべて bigint型になっているのが分かるだろう。
つまり limit: 6
以上を指定しても。同じ bigint 型になるだけで意味はないのだ。
( 少なくとも、 bigint より大きな数値型が導入されない限りは )
string型の場合
素直に limit:
= バイト数で揃う。(当たり前だが)
db/migrate/xxxxxxxxxxx_string_tests.rb
class StringTests < ActiveRecord::Migration
def change
create_table :string_tests do |t|
t.string :string1, limit: 1
t.string :string2, limit: 2
t.string :string3, limit: 3
t.string :string4, limit: 4
t.string :string5, limit: 5
t.string :string6, limit: 6
t.string :string7, limit: 7
t.string :string8, limit: 8
end
end
end
$ rake db:migrate
mysql> desc string_tests;
+---------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+----------------+
| string1 | varchar(1) | YES | | NULL | |
| string2 | varchar(2) | YES | | NULL | |
| string3 | varchar(3) | YES | | NULL | |
| string4 | varchar(4) | YES | | NULL | |
| string5 | varchar(5) | YES | | NULL | |
| string6 | varchar(6) | YES | | NULL | |
| string7 | varchar(7) | YES | | NULL | |
| string8 | varchar(8) | YES | | NULL | |
+---------+------------------+------+-----+---------+----------------+
環境
- [gem] mysql2 (0.3.18)
- Rails 4.0.0
備考
- 初出 2016-01-25
- 旧アカウントの記事より移動
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2018-08-08
Discussion