- 更新日: 2013年11月28日
- Rails
Rails マイグレーションのフィールド定義データ型と MySQL・Ruby との対応表
Ruby on Rails においてマイグレーションファイルを作成する度に、マイグレーションのデータ型と MySQL でのデータ型の対応を確認するのが面倒くさいのでまとめました。
Rails 4.0.0
Ruby 2.0.0p247
MySQL 5.5.28
確認用マイグレーション(migration)の作成
まずフィールドのデータ型を確認するためのテスト用マイグレーションを作成。datatypes というテーブルを作成するため、create_datatypes という名前のマイグレーションを作成します。
1 2 3 |
$ bundle exec rails generate migration create_datatypes |
生成されたマイグレーションファイルを編集。
db/migrate/***_create_datatypes.rb
1 2 3 4 5 6 7 8 9 10 11 |
class CreateDatatypes < ActiveRecord::Migration def change field_types = %W[integer decimal float string text binary date datetime timestamp time boolean] create_table :datatypes do |t| field_types.each do |type| t.send(type.to_sym, "field_#{type}".to_sym) end end end end |
フィールドのデータ型を先に配列で定義して、Object#send を使って動的に t.integer などのメソッドを呼び出してます。コードを短く書けるので Ruby のこういうところ好きですが、通常のマイグレーションファイルは、普通に t.integer, t.string ・・・と1行ずつ定義したほうが見やすいと思います。
マイグレーション実行後テーブルを確認
マイグレートを実行。
1 2 3 |
$ bundle exec rake db:migrate |
データベースを確認。利用している MySQL のバージョンは5.5。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 330 Server version: 5.5.28 Source distribution mysql> use railsapp_development; mysql> desc datatypes; +-----------------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+---------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | field_integer | int(11) | YES | | NULL | | | field_decimal | decimal(10,0) | YES | | NULL | | | field_float | float | YES | | NULL | | | field_string | varchar(255) | YES | | NULL | | | field_text | text | YES | | NULL | | | field_binary | blob | YES | | NULL | | | field_date | date | YES | | NULL | | | field_datetime | datetime | YES | | NULL | | | field_timestamp | datetime | YES | | NULL | | | field_time | time | YES | | NULL | | | field_boolean | tinyint(1) | YES | | NULL | | +-----------------+---------------+------+-----+---------+----------------+ 12 rows in set (0.00 sec) mysql> quit; Bye |
これで、マイグレーションのフィールドデータ型と MySQL の実際のデータ型の対応が分かりました。
マイグレーションのフィールド定義データ型と MySQL・Ruby との対応
表にまとめておきます。
マイグレーションのデータ型と MySQL・Ruby との対応表
マイグレーション | MySQL | Ruby |
integer | int(11) | Fixnum |
decimal | decimal(10,0) | BigDecimal |
float | float | Float |
string | varchar(255) | String |
text | text | String |
binary | blob | String |
date | date | Date |
datetime | datetime | Time |
timestamp | datetime | Time |
time | time | Time |
boolean | tinyint(1) | TrueClass/FalseClass |
最後に確認用のテーブルとマイグレーションを削除
テスト用に作ったデータベースの datatypes テーブルを削除。
1 2 3 |
$ bundle exec rake db:rollback |
テストで使ったマイグレーションを削除。
1 2 3 |
$ bundle exec rails destroy migration create_datatypes |
以上です。
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!