システムおよびデータベースの文字コードはすべて utf-8 を使用する前提とします。
既存のシステムからデータを移行するために「load data infile」文を使用すると、読み込んだデータが文字化けしてしまう場合があります。
原因は、「character_set_database」が utf-8 に設定されていないためです。
「load data infile」文は「character_set_database」の設定に従います。
「character_set_database」の設定を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ mysql> show variables like 'character%'; +--------------------------+----------------------------+ | 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 | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) |
以上のように出力された場合、「character_set_database」の設定は「latin1」となっているため、「utf8」に変更します。
1 |
$ mysql> set character_set_database = utf8; |
もう一度「character_set_database」の設定を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mysql> show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) |
「character_set_database」が「utf8」に変更されたため、文字化けを回避できます。