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 |
+----------------------------------------+

参考:

MySQL の文字コード事情 – SlideShare

mariadb の collation を utf8mb4 に対応させる | 頭道

照合順序とは? – Qiita

MySQL の Collation を理解するためにまとめてみた。| 6VOX

MySQL の照合順序 – Qiita

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

記事をシェアする:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA