Rails — マイグレーションで integer カラムを作る時の :limit は、桁数指定ではない ( バイト数指定だ )

# 結論

表題のとおり。
string 型とは勝手が違う。

# 検証

テストのために。integer 型で、`limit: 1` から `limit: 8` までカラムを作ってみる。

```rb: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でデータ型を確認する。

```sql
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:` = バイト数で揃う。（当たり前だが）

```rb: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
```

```sql

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 
- [旧アカウントの記事](https://qiita.com/Yinaura/items/cede8324d08993d2065c)より移動








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->