 最近の XAMPP に入っている MySQL は、my.ini をいじらなくても
最近の 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 へ流し込み
すると、途中から文字化けという事態が起こった。
これはこれで不思議。。。