Edited at

Rails MySQL 絵文字が含まれる文字列を保存する場合の設定


はじめに

昨今スマホユーザーは絵文字をメチャクチャ使います。

単純にデフォルト設定のまま開発を進めていると

Mysql2::Error: Incorrect string value

と言われてしまうのです。


設定

とにかく重要なのはutf8mb4です。

どうも公式によると、


utf8 という名前の文字セットは、文字あたり最大 3 バイトを使用し、BMP 文字だけを含みます。utf8mb4 文字セットは、文字ごとに最大 4 バイトを使用し、補助文字をサポートします。


ということでデータで絵文字を表現するには4バイト必要になってくるのだと勝手に解釈しています。(調べてないので確かではない)


database.yml

以下を追記します。


database.yml

charset: utf8mb4

encoding: utf8mb4


table.schema

うちではRidgepoleを使っているのでそちらの設定です。

Rails マイグレーションの廃止とRidgepoleの導入・利用方法

マイグレーションを使っている人はそちらの環境に当てはめてください。


table.schema

# -*- mode: ruby -*-

# vi: set ft=ruby :
create_table "tables", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4" do |t|
t.string "name"
t.text "message"
t.datetime "created_at", default: -> { "CURRENT_TIMESTAMP" }, null: false
t.timestamp "updated_at", default: -> { "CURRENT_TIMESTAMP" }, null: false
end


終わりに

知っていればなんともないことですよねー

ブログで見たい方はこちら

Rails MySQL 絵文字が含まれる文字列を保存する場合の設定