MYSQL 文字コード確認

  • 11
    いいね
  • 2
    コメント

mysqlを使用していて文字コードでハマることはよくある。  
どう確認すればいいかわかるようにまとめる。

1.「クライアント」と「サーバ」の文字コードを確認

文字コード設定は、クライアントとサーバそれぞれで持っている。
確認方法

mysql> show variables like '%char%';
+--------------------------+------------------------------
| Variable_name            | Value                       |
------------------------+--------------------------------+
| character_set_client     | utf8                        | クライアント
| character_set_connection | utf8                        | クライアント
| character_set_database   | utf8                        | サーバ
| character_set_filesystem | binary                      | 
| character_set_results    | utf8                        | クライアント
| character_set_server     | utf8                        | サーバ
| character_set_system     | utf8                        |
| character_sets_dir       | /usr/local/mysql/charsets/  |
+--------------------------+-----------------------------+
8 rows in set (0.03 sec)

  • character_set_client
    クライアント側の設定。
    クライアントがサーバにクエリを送信する際に使用する。

  • character_set_results
    サーバ側の設定。
    サーバがクライアントにクエリ結果を送る時に使用する。

  • character_set_connection
    クライアント側の設定。
    クライアントが送ったクエリをサーバが解析する際に使用する。

  • character_set_database
    サーバ側の設定。
    サーバのデフォルトキャラクタセット。LOAD DATA INFILE文はこの指定が使用される。
    mysql起動時にcharacter_set_serverの値が適用される。

  • character_set_server
    サーバ側の設定。
    サービス起動時のデフォルトキャラクタセット。

  • character_set_system
    ファイル名をこのキャラクタセットで扱う。

  • character_sets_dir
    キャラクタセットを扱う上で必須となるファイルを配置しているディレクトリ

2.「データベース」「テーブル」「カラム」単位で文字コードを確認

サーバ側の文字コードセットは、データベース、テーブル、カラム単位で指定可能。小さな単位での指定が有効となる。ここでいうとカラムに指定した文字コードが優先されるので、文字化けなどの調査を行う際は、テーブル定義も確認する必要がある。以下で確認できる。

show create table 'table_name';