ちょっとハマったのでメモ
- MySQL5.1.71
- CentOS 5.2
MySQLでSjisファイルをロードするときに文字化けしてしまう
$ export LANG=ja_JP.sjis # 効かない $ mysql -uroot -hhost -ppass --local-infile=1 --default-character-set=sjis << Eof use mysql ; set names sjis # 効かない ; load data local infile "sjis.txt" into table table ; Eof
悩みました
$ mysql -uroot -hhost -ppass --local-infile=1 --default-character-set=sjis << Eof use mysql ; set character_set_database=sjis # これでOK ; load data local infile "sjis.txt" into table table ; Eof
どうやらDBの設定がおかしかったようです
mysql> show global variables like "%charac%"; +--------------------------+--------------------------------------------------------------+ | 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 |
これを変更するにはmy.cnfに設定し再起動すればOKです
$ vi my.cnf [mysql] default_character_set = sjis [mysqld] character-set-server=sjis
グローバル変数もこうなります
mysql> show global variables like "%charac%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | sjis | | character_set_connection | sjis | | character_set_database | sjis | | character_set_filesystem | binary | | character_set_results | sjis | | character_set_server | sjis | | character_set_system | utf8 |