現象 †
日本語のデータを挿入し、結果を表示すると「???」のように化けていました。
原因 †
対策 †
方法 †
- 以下のSQL文を実行し、現在の文字コードセットを確認します。
1
|
| show variables like "char%";
|
今回はこのような結果が得られました。
文字コードセットをlatin1からUTF-8へ変更します。
Variable_name | Value |
character_set_client | latin1 |
character_set_connection | latin1 |
character_set_database | latin1 |
character_set_filesystem | binary |
character_set_results | latin1 |
character_set_server | latin1 |
character_set_system | latin1 |
character_sets_dir | C:\Program Files (x86)\VertrigoServ\Mysql\share\charsets\ |
- my.iniを開きます。
- mysqld、mysqldump、mysqlセクションに以下のキーを追加します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [mysqld]
# ~途中省略~
# デフォルト文字コードセット
default-character-set=utf8
# 自動で文字コード変換しない
skip-character-set-client-handshake
[mysqldump]
# ~途中省略~
# デフォルト文字コードセット
default-character-set=utf8
[mysql]
# ~途中省略~
# デフォルト文字コードセット
default-character-set=utf8
|
- サービスを再起動します。
- 再び文字コードセットを確認します。
1
|
| show variables like "char%";
|
文字コードセットがUTF-8に変更されていることを確認します。
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 | C:\Program Files (x86)\VertrigoServ\Mysql\share\charsets\ |
- 最後に、日本語データを挿入出来るか確認して終了です。
ただ、私の場合はこの段階で日本語データを挿入しても失敗しました。
挿入しようとしたDBを確認すると、照合順序が「latin1_swedish_ci」となっていました。
テスト用のDBだったので、照合順序の変更ではなく、削除&再作成を行いました。
再作成されたデータベースは、照合順序が「utf8_general_ci」となり、この段階で日本語データの挿入が成功しました。
検証時の環境 †
- Windows 7 Professional x64
参考 †