日本語 INSERT 時に Warning (Code 1366): Incorrect string value: ... が出る問題
ある Schema では問題無く INSERT が出来るのに別の Schema では文字化けすると言う良く解らない現象に数時間悩まされたが、私の場合は character_set_database が latin1 のままだったことが原因だった。
★ 悪い例
> show variables like 'character\_set\_%'; +--------------------------+--------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | +--------------------------+--------+
character_set_database が latin1 になっていて、この時は挿入時に日本語がみんな「?」になってしまう。
★ 良い例
> show variables like 'character\_set\_%'; +--------------------------+--------+ | 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 | +--------------------------+--------+
★ 解決策
Schema を作る前なら /etc/my.cnf の [mysqld] セクションに default-character-set=utf8 を追加しておくなどすれば良いのだが、そうで無かった場合はどうするのやら。http://fg-180.katamayu.net/archives/2006/09/22/023614 では dump してもう一度作り直したそうだけど、私は一度 Drop して作り直して解決した。既存のデータベースの character_set_database は変更できるのかな?まだ調べて無いけど。