utf8mb4 の使い方
データベースで使用している文字コードを確認する。
mysql> show variables like 'character_%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ mysql> show variables like 'collation_%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+
utf8
は4バイトの Unicode に対応していないため、文字コードと照合順序を utf8mb4
に変更する。
/etc/my.conf
で /etc/my.cnf.d
が includedir
されている。
!includedir /etc/my.cnf.d
/etc/my.cnf.d/utf8mb4.cnf
を作成して設定を追加する。
[mysqld] character-set-server = utf8mb4 [client] default-character-set = utf8mb4
MariaDB を再起動する。
$ sudo systemctl restart mariadb
文字コードの設定が変更されていることを確認する。
mysql> show variables like 'character_%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ mysql> show variables like 'collation_%'; +----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+
参考:
MariaDB で 4バイトの utf を扱う設定 | Balun Software
Migrating UTF8 to UTF8-MB4 on MariaDB | ゆるふわキャンパー
MySQL の文字コードを utf8mb4 に変更 | すだち Wiki
文字コードを utf8 から utf8mb4 へ | 世界を疑え
MySQL の encoding を utf8 から utfmb4 に変更して寿司ビール問題に対応する | TechRacho
MySQL で utf8 と utf8mb4 の混在で起きること | @tmtms のメモ
Setting Character Sets and Collations | MariaDB Knowledge Base [Official]
mariadb の 「character_set_server」がutf8にならない – スタック・オーバーフロー
寿司ビール問題
寿司とビールが一致してしまう
mysql> select '🍣'='🍺'; +---------+ | '?'='?' | +---------+ | 1 | +---------+
絵文字を区別するには照合順序 (collation) に utf8mb4_unicode_520_ci
を指定する。
mysql> select '🍣'='🍺' collate utf8mb4_unicode_520_ci; +----------------------------------------+ | '?'='?' collate utf8mb4_unicode_520_ci | +----------------------------------------+ | 0 | +----------------------------------------+
参考:
mariadb の collation を utf8mb4 に対応させる | 頭道
MySQL の Collation を理解するためにまとめてみた。| 6VOX
utf8_unicode_ci に対する日本の開発者の見解 | かみぽわーる
Setting Character Sets and Collations – MariaDB Knowledge Base [Official]
テーブルやカラムごとに文字コードや照合順序を設定する
参考:
MySQL にインストールされた CHARACTER SET と COLLATION の確認方法とカラム別の設定方法 | xmalloc のプログラミングノート
Ruby on Rails
参考:
MySQL の encoding を utf8 から utfmb4 に変更して寿司ビール問題に対応する | TechRacho
collation – ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter | Ruby on Rails API [Official]
creation_options – rails/mysql_database_tasks.rb at v5.2.3 · rails/rails – GitHub
collation – rails/mysql_database_tasks.rb at v5.2.3 · rails/rails – GitHub