内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
mysql:utf8mb4
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
<markdown> # utf8mb ## utf8mb4にアップグレード 文字列カラムのcharsetをutf8(utf8mb3)からutf8mb4に変換する手順 DBのdefault charsetを変更 ```sql ALTER DATABASE <db_name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci; ``` テーブルのdefault charsetを変更 ```sql ALTER TABLE <table_name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci; ``` テーブルの文字列データを変換(データ量で所要時間が変化するのでテスト環境を用意してサービスに影響しないかチェックすること) ```sql ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` テーブルの変更はテーブル毎に実行する。文字列カラムのないテーブルに実行しても問題ない。全テーブルに対してスクリプトで一括実行するといいかも。 ## 照合順序について mysql8系ではCOLLATE未指定の場合、`utf8mb4_0900_ai_ci`となる * ai: accent insensitive、アクセントを区別しない * ci; case insensitive、大文字小文字を区別しない * [10.3.1 照合の命名規則](https://dev.mysql.com/doc/refman/8.0/ja/charset-collation-names.html) ## クライアント側の設定 接続して変数を見てみる ``` 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のデフォルトはutf8mb4なのでどこかで明示的に設定しているはず。設定箇所はmy.cnfの`[client]`セクション、または接続時のコマンドラインオプション、アプリケーションのDB設定である dockerのcompose.yamlを見たところ ``` mysql-cli: image: mysql:latest command: ["mysql", "-u", "root", "-h", "mysql", "--default-character-set=utf8"] profiles: - one-off ``` `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で問題ありません。まだ、変更もできません。 </markdown> n>
mysql/utf8mb4.txt
· 最終更新:
2024/01/19 14:50
by
nullpon
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ