最近の 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\ |
+--------------------------+--------------------------------+
my.ini
インストール 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 が起動しなくなった。
[ERROR] (xampp)\mysql\bin\mysqld.exe: unknown variable ‘default-character-set=utf8’
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′
my.ini 編集後
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 値
参考サイトにしたがって、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
原因
character_set_database だけが値が異なっている原因は・・・
この値はどこを参照しているかというと、create database した時の値です。
よかろうもん!:MySQLでcharacter_set_databaseがlatin1になってしまう問題の対応方法
だそうです。
あれれ。
データベースを作成した時に、文字コードを設定しそこねたのかしら。
確認方法
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 へ流し込み
すると、途中から文字化けという事態が起こった。
これはこれで不思議。。。