ウェブサービスを作っています。

できるだけ簡単に ActiveRecord で utf8mb4 を動かす

MySQL で絵文字を扱うのに必要な utf8mb4 の設定方法です。

新規にデータベースを構築する場合向けです。

Rails 4.2.6 で確認しています。

データベースの設定

config/database.yml

default: &default
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_bin

encoding を utf8mb4 に、collation を utf8mb4_bin にします。

collation を utf8mb4_bin にすることで、「ハハ」と「パパ」などが同一のものとして扱われるのを防ぎます。

ただし、「A」と「a」などのアルファベット大文字・小文字も別のものとして扱われるようになります。

string の文字数を変更する

インデックス長の関係で、string が VARCHAR(255) ではなく VARCHAR(191) になるようにします。

追記(2017/3/21 15:05):

MySQL 5.7.7 以降では、以下の設定は不要です。( 参考: MySQL 5.7 と絵文字(ちょこっと Rails) - TMD45'β'LOG!!! )

追記ここまで


config/initializers/mysql_utf8mb4_fix.rb

require 'active_record/connection_adapters/abstract_mysql_adapter'

module ActiveRecord
  module ConnectionAdapters
    class AbstractMysqlAdapter
      NATIVE_DATABASE_TYPES[:string] = { name: 'varchar', limit: 191 }
    end
  end
end

参考