MySQLでdefault-character-setを指定する前にデータベースを作成するとこうなる
この記事ではアフィリエイト広告を利用しています。
開発環境の MySQL で my.cnf に default-character-set = utf8 を指定しているのに、なぜか character_set_database が utf8 になっていない・・・ということがあって調べたメモです。
どういう状態だったかというと、
$ mysql -u username -p -D dbname
と「-D」でデータベースを指定して MySQL にログインすると、
mysql> show variables like 'character%'; +--------------------------+-----------------------------------------+ | Variable_name | Value | +--------------------------+-----------------------------------------+ | 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_sets_dir | /opt/local/share/mysql5/mysql/charsets/ | +--------------------------+-----------------------------------------+
character_set_database が latin1 になっていて、
$ mysql -u username -p
という風にデータベースを指定せずにログインすると、
mysql> show variables like 'character%'; +--------------------------+-----------------------------------------+ | 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 | /opt/local/share/mysql5/mysql/charsets/ | +--------------------------+-----------------------------------------+
character_set_database はきちんと utf8 になっている。
どうも my.cnf にきちんと dafault-character-set = utf8 を指定する前に、うっかり該当のデータベースを作成してしまった疑惑。というかおそらくそれが原因。
なので -D オプションをつけた時とつけなかった時で character_set_database の値が変わってしまっていたようです。
データが空の状態で開発を始めれば文字化けするのですぐに気づいたはずが、utf8 環境のデータベースを mysqldump してそれを開発環境にインポートしたので、インポートされたテーブルには DEFAULT CHARSET=utf8 がついていて文字化けせず、最近新しくテーブルを作成したら DEFAULT CHARSET=latin1 になっていて気づいたというオチです。
実践ハイパフォーマンスMySQL 第2版
posted with amazlet at 10.11.23
Baron Schwartz Peter Zaitsev Vadim Tkachenko Jeremy D. Zawodny Arjen Lentz Derek J. Balling
オライリージャパン
売り上げランキング: 39001
オライリージャパン
売り上げランキング: 39001
コメントを残す