バージョン
- mysql: 8.0.20
what
- Docker mysql:8.0.20にログインすると、日本語が
???
に文字化けしていた charset.cnf
(ファイル名前は何でもok) でdefault-character-set
をuft8mb4
に設定をする事で解消した
// /etc/mysql/conf.d/charset.cnf [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_bin [client] loose-default-character-set = utf8mb4
- 設定前
mysql> show variables like '%char%'; +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql-8.0/charsets/ | +--------------------------+--------------------------------+ 8 rows in set (0.01 sec)
- 設定後
mysql> show variables like '%char%'; +--------------------------+--------------------------------+ | 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-8.0/charsets/ | +--------------------------+--------------------------------+ 8 rows in set (0.01 sec)
作業時に調べたメモ
前提
- クライアントはサーバーに接続するときに、使用する文字セットの名前を送信する
- サーバーはこの名前を使用して、下記のシステム変数を設定する
character_set_client
character_set_results
character_set_connection
サーバシステム変数 (文字コード関連)
character_set_client
- クライアントが送ってくるとサーバーが想定している文字コード
- 関連オプション
--default-character-set
オプション (my.cnf
の[client]
のdefault-character-set
)
character_set_results
- サーバーがクライアントにクエリー結果を返信するときに使用する文字コード
character_set_connection
- クエリを実行する文字コード
character_set_database
- データベースの文字コード
- デフォルトでok
character_set_filesystem
- ファイル名の文字コード
- デフォルトでok
character_set_server
- 新規にデータベースを作るときの文字コード
character_set_system
- テーブル名等を保存する文字コード
- デフォルトでok
my.cnf
の [client]
の default-character-set
- クライアントの文字セット
- 指定方法はプログラム/言語に依存
プログラムによっては、
my.cnf
の[client]
のdefault-character-set
が有効loose-
プレフィックス- why
- クライアントの中には
default-character-set
が設定されているとエラーになるケースがある
- クライアントの中には
- what
- そのようなクライアントでエラーにならない様にオプションを無視させる
- why
utf8mb4
utf8
vsutf8mb4
utf8mb4_bin