先日、Craft CMS のデータベースを眺めてたところ、MySQL 8.0 でテーブルの文字コードが utf8mb3
、照会順序が utf8mb3_general_ci
になっている場合があることに気づきました。
文字コードは utf8
もしくは utf8mb4
を指定しているハズなので、にわかに不安が。。
公式リファレンスを確認したところ、そもそも utf8
は utf8mb3
のエイリアスで、MySQL 8.0 以降は非推奨なんですね。 将来的に削除される可能性があるということで、あらかじめ utf8mb4
に変更しておいた方が良さそうです。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 10.9.2 utf8mb3 文字セット (3 バイトの UTF-8 Unicode エンコーディング)
https://dev.mysql.com/doc/refman/8.0/ja/charset-unicode-utf8mb3.html
そこで、今回は MySQL のテーブル文字コードと照合順序を変更する方法をご紹介したいと思います。
これは Craft CMS Advent Calendar 2023 23日目の記事です。
システムのデフォルト値を確認
変更する前に、Craft CMS のデフォルト値を確認しておきましょう。
Database Connection Settings | Craft CMS Documentation | 4.x
https://craftcms.com/docs/4.x/config/db.html#collation
公式ドキュメントのデータベース接続設定には、以下のように記載されています。
文字セット(charset) | デフォルトの照合順序(collation) |
---|---|
utf8 | utf8_general_ci |
utf8mb4 | utf8mb4_0900_ai_ci |
Craft 4 のデフォルトの文字セットが utf8
のため、明示的に変更していなければ utf8mb3
になっている可能性がある、ということですね。
次に、utf8mb4
にした場合のデフォルトの照合順序を確認してみます。
utf8mb4_0900_ai_ci でいいのか?問題
MySQL 8.0 以降は、utf8mb4_0900_ai_ci
がデフォルトの照合順序になっています。
Craft CMS もそれに準じているようですが、日本語を扱うサイトでは検討が必要です。
MySQL の utf8mb4 の文字照合順序まとめ
https://zenn.dev/zoeponta/articles/090c68ba820a24
こちらの記事の確認結果にわかりやすくまとめられていて、照合順序ごとにひらがな・カタカナ・拗音・濁音などの扱いが異なることがわかります。
多言語サイトであれば英文のキャピタライズを踏まえて utf8mb4_general_ci
、日本語サイトのみであれば utf8mb4_bin
あたりで良さそうです。ただし、用途によると思いますので、よりベターなものを選択してください。
今回は、utf8mb4_general_ci
に変更してみます。
コンソールコマンドで変更する
Craft CMS には、データベースの文字コードと照合順序を変更するコンソールコマンドが用意されています。
Console Commands | Craft CMS Documentation | 4.x
https://craftcms.com/docs/4.x/console-commands.html#db-convert-charset
./craft db/convert-charset utf8mb4 utf8mb4_general_ci
このコマンドを実行すると、次の画像のように即座に変換処理が走りますので、事前にバックアップを取っておきましょう。
これで、テーブルの文字コードと照合順序が変更されました。
まとめ
今回は、Craft CMS で MySQL のテーブル文字コードと照合順序を変更する方法をご紹介しました。
専用のコンソールコマンドが用意されているため、簡単に変更できるのが助かりますね。
Craft 3 時代から運用しているサイトは utf8
を指定していることがあるため、適宜切り替えていこうと思います。