takafumi blog

日々の勉強メモ

MySQL/MariaDB 文字コードの設定

環境   CentOS 7.0 MariaDB 5.6
※ここで使用しているのはMariaDBだが、設定はほぼ同じなのでMySQLとして扱う。



文字コードに関する記事
MySQL/MariaDB 文字コードの自動変換
MySQL/MariaDB 文字コードの設定
MySQL/MariaDB 文字コードの破壊と文字化け対策
MySQL/MariaDB サーバー文字コードの優先度

文字コードの設定各種

この文字コード設定の確認は以下のSQLを実行する。

MariaDB [test] > show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

各設定値の意味は以下のようになる。

設定値 説明
character_set_client クライアント => サーバーにメッセージを送る際に使われるキャラセット
character_set_connection クライアントが送ったクエリをサーバーが解析する際、このキャラセットに従ってunescapeする
character_set_database DBのdefaultキャラセット。"LOAD DATA INFILE"文はこの指定に従う
character_set_filesystem ファイルシステム文字コード
character_set_results サーバー => クライアントに結果を送信するときに使われるキャラセット
character_set_server サーバーのdefaultキャラセット
character_set_system ファイル名をこのキャラセットで扱う。utf8固定
character_sets_dir キャラセットファイルの置いてあるディレクトリ


文字コードの設定方法

文字コードを設定するには、設定ファイル(/etc/my.cnf)に文字コードを指定する。
サーバー側文字コード(character_set_database)は

[mysqld]
character-set-server=utf8

クライアント側(character_set_results)は

[mysql]
character-set-server=utf8

とする。