Rails
MySQL
絵文字

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 絵文字が含まれる文字列を保存する場合の設定