MySQL5.5でDBD::mysqlを使う時の注意
MySQLを5.5にアップデートし、my.cnfで以下のように文字セットの設定をきちんとしているとする。
[client] default-character-set=cp932 [mysqld] character-set-server=cp932 [mysqldump] default-character-set=cp932 [mysql] default-character-set=cp932
mysql> show variables like 'character\_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | cp932 |
| character_set_connection | cp932 |
| character_set_database | cp932 |
| character_set_filesystem | binary |
| character_set_results | cp932 |
| character_set_server | cp932 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
この状態で最新のDBD::mysql v4.019 以上を入れてしまったら、スクリプトの接続部分に以下を追加すること。
追加しないとクライアント側が「latin1」となり、日本語が全て「?」になってしまうという恐ろしい状態になる。
【修正前】
$dbh = DBI->connect("DBI:mysql:table_name:localhost", user, pass);
【修正後】
$dbh = DBI->connect("DBI:mysql:table_name:localhost;mysql_read_default_file=/etc/my.cnf", user, pass);
my.cnfの位置が不明な場合は自分が設置できるディレクトリに、以下の内容を書いて保存する。
【my_perl.cnf】
[perl] default-character-set=cp932
そしてスクリプトの接続部を以下のようにする。
$dbh = DBI->connect("DBI:mysql:table_name:localhost;mysql_read_default_group=perl;mysql_read_default_file=/my/dir/my_perl.cnf", user, pass);
【追記】
あら、、、、
mysql_read_default_file は、v4.019からではなく随分前から使えているんですね(汗
激しく誤解していました。