#重要なvariables
各セッションで以下がutf8mb4となっているとよい
character_set_client
character_set_connection
character_set_result
できればグローバルで設定しておきたい。
##character_set変数群の解説
SHOW VARIABLES LIKE 'character\_set\_%';
character_set | 解説 |
---|---|
character_set_client | クライアントが送ってくるとサーバーが想定している文字コード |
character_set_connection | クエリを実行する文字コード |
character_set_database | 使っているデータベースの文字コード。変える必要はないしsetで変えてはいけない。 |
character_set_filesystem | ファイル名の文字コード。デフォルトでいい |
character_set_results | クライアントに結果を返すときの文字コード |
character_set_server | 新規にデータベースを作るときの文字コード。設定しておくと楽。いろいろ継承されるが上書きできる。 |
character_set_system | テーブル名とかを保存する文字コード。デフォルトでいい |
#my.cnfで設定するもの
##サーバ側
###skip-character-set-client-handshake
4.xからの移行用であまりおすすめしない。
設定すると以下の3つを強制的にcharacter_set_serverの内容に変更する。
character_set_connection
character_set_client
character_set_result
この状態でも set names
すると上記3つが上書きされる。
###character-set-server = utf8mb4
そのまま
クライアント側
[client]の default-character-set=utf8mb4
文字コード無指定のクライアントはここを読む。
ドライバの実装によっては読まないこともある。
アプリケーションからMySQL接続する際は、アプリケーション内の設定に明記したほうがよい
my.cnf内で[]
はグループを指す。
[mysql]
と[client]
はだいたい同じ。[mysql]
はmysqlコマンドを指す。
JDBC
characterEncoding
とcharacterSetResults
をUTF-8
とすれば、utfmb4扱いとなる。
ここは直接utf8mb4を指定しない。JDBCはMySQL以外も扱うため。