MySQL/MariaDB 文字コードの自動変換
環境 CentOS 7.0 MariaDB 5.6
※ここで使用しているのはMariaDBだが、設定はほぼ同じなのでMySQLとして扱う。
■文字コードに関する記事
MySQL/MariaDB 文字コードの自動変換
MySQL/MariaDB 文字コードの設定
MySQL/MariaDB 文字コードの破壊と文字化け対策
MySQL/MariaDB サーバー文字コードの優先度
▼文字コード自動変換について
MySQLはクライアントとサーバーでメッセージをやりとりする際に、サーバー側で文字コードを変換する。
例えばサーバーがEUC-JP(ujis)、クライアントがUTF8とすると、
・クライアント => サーバー :SQLを送る場合
UTF8 -(変換)-> Unicode -(変換)-> EUC-JP
・サーバー => クライアント :結果を返すとき
EUC-JP -(変換)-> Unicode -(変換)-> UTF8
と一度Unicodeに文字コードを変換して*1 *2、それぞれの文字コードに変換する。
この文字コードの設定が間違っていると、文字化けが発生する。
この自動変換を無効化するには、
a) サーバーとクライアントの文字コードを一致させる
b) キャラセットを「binary」にすることで、自動変換をキャンセルする。
ただしbinaryはsjis,cp932(Microsoft定義のsjis)の文字コードを破壊することがあるので注意の必要がある。