mysql:utf8mb4
文書の過去の版を表示しています。
utf8mb
utf8mb4にアップグレード
文字列カラムのcharsetをutf8(utf8mb3)からutf8mb4に変換する手順
DBのdefault charsetを変更
ALTER DATABASE <db name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci;
Tableのdefault charsetを変更
ALTER TABLE <TABLE name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci;
データを変換(データ量で所要時間が変化するのでテスト環境を用意してサービスに影響しないかチェックすること)
ALTER TABLE <TABLE name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
照合順序について
mysql8系ではCOLLATE未指定の場合、utf8mb4_0900_as_ci
となる
クライアント側の設定
接続して変数を見てみる
mysql> show variables like "character_set%"; +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | utf8mb3 | | character_set_connection | utf8mb3 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb3 | | character_set_server | utf8mb4 | | character_set_system | utf8mb3 | | character_sets_dir | /usr/share/mysql-8.0/charsets/ | +--------------------------+--------------------------------+ 8 rows in set (0.01 sec)
こうなっていた場合は、クライアント側でcharsetをutf8を明示的に指定していないか確認する(mysql8はdefaultでutf8mb4なのでどこかで設定しているはず)
設定箇所はmy.cnfの[client]
セクション、または接続時のコマンドラインオプション、アプリケーションのDB設定である
mysql-cli: image: mysql:latest command: ["mysql", "-u", "root", "-h", "mysql", "--default-character-set=utf8"] profiles:
default-character-set
にutf8が設定されていた。これをutf8mb4に修正する
mysql> show variables like "character_set%";\ +--------------------------+--------------------------------+ | 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 | utf8mb3 | | character_sets_dir | /usr/share/mysql-8.0/charsets/ | +--------------------------+--------------------------------+ 8 rows in set (0.01 sec)
直りました。アプリケーションの設定ファイルも見直しましょう(簡単に確認できないので見落としがち)
character_set_system
はメタデータ用の文字セットでデフォルト値のutf8mb3で問題ありません(テーブル名、カラム名やインデックス名などに絵文字を入れるような狂ったことをすると問題になるかも)。
mysql/utf8mb4.1700100620.txt.gz · 最終更新: 2023/11/16 02:10 by nullpon