設定 -> 文字コード
最近の XAMPP に入っている MySQL は、my.ini をいじらなくても
phpMyAdwmin からデータベースを作成する際に
文字コードを指定することで、文字化けをしなかったので
そのままで利用していたけど、久しぶりに文字化けに遭った。
MySQL:5.5.27
XAMPP:1.8.3
何もしてない気がするので、多分下記がデフォルト。
- mysql> show variables like 'character_set%';
- +--------------------------+--------------------------------+
- | Variable_name | Value |
- +--------------------------+--------------------------------+
- | character_set_client | cp932 |
- | character_set_connection | cp932 |
- | character_set_database | latin1 |
- | character_set_filesystem | binary |
- | character_set_results | cp932 |
- | character_set_server | latin1 |
- | character_set_system | utf8 |
- | character_sets_dir | D:\xampp\mysql\share\charsets\ |
- +--------------------------+--------------------------------+
インストール 1.7.3
以前、こちらの記事で書いたのが基本。
- [mysqld]
- # 2015-05-22 追記
- character-set-server=utf8
- skip-character-set-client-handshake
- [mysqldump]
- # 2015-05-22 追記
- default-character-set=utf8
- [mysql]
- # 2015-05-22 追記
- default-character-set=utf8
以前 の通りに my.ini をいじったら、MySQL が起動しなくなった。
MySQL 5.5 から仕様が変更になったらしい。
[mysqld] についてはdefault-character-set=utf8 ではなく
character-set-server=utf8 と記述することで無事に起動。
- [mysqld]
- - default-character-set=utf8
- + character-set-server=utf8
cyberarchitect:[ERROR] mysql\bin\mysqld.exe: unknown variable ‘default-character-set=utf8′
- mysql> show variables like 'character_set%';
- +--------------------------+--------------------------------+
- | 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 | D:\xampp\mysql\share\charsets\ |
- +--------------------------+--------------------------------+
むw 1つだけ latin1。
参考サイトにしたがって、global も覗いてみる。
- mysql> show global variables like 'character_set%';
- +--------------------------+--------------------------------+
- | 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 | D:\xampp\mysql\share\charsets\ |
- +--------------------------+--------------------------------+
ほー。こちらはちゃんとなっている。
my,ini 設定前の global 値も見ておけばよかった~。
character_set_database だけが値が異なっている原因は・・・
この値はどこを参照しているかというと、create database した時の値です。
だそうです。
あれれ。
データベースを作成した時に、文字コードを設定しそこねたのかしら。
- mysql> show create database `databese1`;
- +-----------+----------------------------------------------------------------------+
- | Database | Create Database |
- +-----------+----------------------------------------------------------------------+
- | databese1 | CREATE DATABASE `databese1` /*!40100 DEFAULT CHARACTER SET latin1 */ |
- +-----------+----------------------------------------------------------------------+
うほ!確かに。。。
- mysql> ALTER DATABASE `databese1` default character set utf8;
直った~♪
問題解決にはあまり関係ないので
記事末に覚え書き用経緯を。
駅データ.jp
こちらのサイトから、全国の駅データをいただいてきた。
配布されているデータは、ちゃんと UTF8 なのだけど
データを追加する都合上、Excel で編集してから DB へ流し込んだ。
データが多く、phpMyAdmin からではタイムアウトになってしまったので
コマンドラインから実行。
- 配布元よりデータを DL
- Terapad で、SHIFT-JIS、CR+LF へ変換
- Excel で、データ編集
- Excel から CSV 出力
- Terapad で、UTF-8N、LF へ変換
- コマンドラインより DB へ流し込み
すると、途中から文字化けという事態が起こった。
これはこれで不思議。。。