F.Ko-Jiの「一秒後は未来」

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版
Baron Schwartz Peter Zaitsev Vadim Tkachenko Jeremy D. Zawodny Arjen Lentz Derek J. Balling
オライリージャパン
売り上げランキング: 39001

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など