&tag(Rails/絵文字を扱う);
*目次 [#qa6e1da1]
#contents
*関連ページ [#k06a7f2d]
*参考情報 [#h52062b8]

*MySQLで絵文字を扱う [#z3af2636]
*Rails4でMySQLで絵文字を扱う [#z3af2636]
-MySQLのutf8では絵文字が保存できないので、utf8mb4を使う必要がある。
-ALTER TABLEなどで変更する場合、列ごとの文字コードまで変更する必要がありめんどくさい。
-一旦DB全体をドロップしたutf8mb4で作りなおすのが簡単。

**MySQLの設定変更 [#bcaf5560]
-[[MySQL/utf8mb4]]に従って設定変更する。

**database.ymlの変更 [#q011559b]
-encodingを変更
#pre{{
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: 5
}}

**DBの作り直し [#y34a806a]
-データのエクスポート。--no-create-infoを指定してcreate tableを除去。さらにREPLACEを使う(migrationが重複するので)。現在のデータベースコードはUTF-8とする。
 mysqldump --single-transaction --no-create-info --replace --default-character-set=binary --quick sample_production > data.sql
-initializers/ar_innodb_row_format.rbを作成する。[[ActiveRecordをutf8mb4で動かす - Qiita:http://qiita.com/kamipo/items/101aaf8159cf1470d823]]より。次に実行するrake db:resetはこれを使うので事前に作成する必要がある。
#pre{{
ActiveSupport.on_load :active_record do
  module ActiveRecord::ConnectionAdapters

    class AbstractMysqlAdapter
      def create_table_with_innodb_row_format(table_name, options = {})
        table_options = options.merge(:options => 'ENGINE=InnoDB ROW_FORMAT=DYNAMIC')
        create_table_without_innodb_row_format(table_name, table_options) do |td|
          yield td if block_given?
        end
      end
      alias_method_chain :create_table, :innodb_row_format
    end

  end
end
}}
- 現在のschema.rbに従って作り直し
 bundle exec rake db:reset RAILS_ENV=production

**データのインポート [#m2a17511]
-そのままutf8mb4はutf8の上位互換なのでそのままインポートできる。
 mysql asl_production < data.sql


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS