LoginSignup
20
22

More than 3 years have passed since last update.

MySQLで文字コードに苦戦している人向けのメモ

Posted at

重要な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

characterEncodingcharacterSetResultsUTF-8とすれば、utfmb4扱いとなる。
ここは直接utf8mb4を指定しない。JDBCはMySQL以外も扱うため。

20
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
22