設定 -> 文字コード

Posted by muchag | MySQL |
初回投稿:2015-05-22 (金) 22:39:16 | 最終更新:2015-05-22 (金) 23:07:53

最近の XAMPP に入っている MySQL は、my.ini をいじらなくても
phpMyAdwmin からデータベースを作成する際に
文字コードを指定することで、文字化けをしなかったので
そのままで利用していたけど、久しぶりに文字化けに遭った。

【環境】
MySQL:5.5.27
XAMPP:1.8.3
デフォルト?

何もしてない気がするので、多分下記がデフォルト。

  1. mysql> show variables like 'character_set%';
  2.  
  3. +--------------------------+--------------------------------+
  4. | Variable_name            | Value                          |
  5. +--------------------------+--------------------------------+
  6. | character_set_client     | cp932                          |
  7. | character_set_connection | cp932                          |
  8. | character_set_database   | latin1                         |
  9. | character_set_filesystem | binary                         |
  10. | character_set_results    | cp932                          |
  11. | character_set_server     | latin1                         |
  12. | character_set_system     | utf8                           |
  13. | character_sets_dir       | D:\xampp\mysql\share\charsets\ |
  14. +--------------------------+--------------------------------+
my.ini

インストール 1.7.3
以前、こちらの記事で書いたのが基本。

  1. [mysqld]
  2. # 2015-05-22 追記
  3. character-set-server=utf8
  4. skip-character-set-client-handshake
  5.  
  6. [mysqldump]
  7. # 2015-05-22 追記
  8. default-character-set=utf8
  9.  
  10. [mysql]
  11. # 2015-05-22 追記
  12. 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 と記述することで無事に起動。

  1. [mysqld]
  2. - default-character-set=utf8
  3. + character-set-server=utf8
参考サイト

cyberarchitect:[ERROR] mysql\bin\mysqld.exe: unknown variable ‘default-character-set=utf8′

my.ini 編集後
  1. mysql> show variables like 'character_set%';
  2.  
  3. +--------------------------+--------------------------------+
  4. | Variable_name            | Value                          |
  5. +--------------------------+--------------------------------+
  6. | character_set_client     | utf8                           |
  7. | character_set_connection | utf8                           |
  8. | character_set_database   | latin1                         |
  9. | character_set_filesystem | binary                         |
  10. | character_set_results    | utf8                           |
  11. | character_set_server     | utf8                           |
  12. | character_set_system     | utf8                           |
  13. | character_sets_dir       | D:\xampp\mysql\share\charsets\ |
  14. +--------------------------+--------------------------------+

むw 1つだけ latin1。

global 値

参考サイトにしたがって、global も覗いてみる。

  1. mysql> show global variables like 'character_set%';
  2.  
  3. +--------------------------+--------------------------------+
  4. | Variable_name            | Value                          |
  5. +--------------------------+--------------------------------+
  6. | character_set_client     | utf8                           |
  7. | character_set_connection | utf8                           |
  8. | character_set_database   | utf8                           |
  9. | character_set_filesystem | binary                         |
  10. | character_set_results    | utf8                           |
  11. | character_set_server     | utf8                           |
  12. | character_set_system     | utf8                           |
  13. | character_sets_dir       | D:\xampp\mysql\share\charsets\ |
  14. +--------------------------+--------------------------------+

ほー。こちらはちゃんとなっている。

my,ini 設定前の global 値も見ておけばよかった~。

character_set_database
原因

character_set_database だけが値が異なっている原因は・・・

この値はどこを参照しているかというと、create database した時の値です。

よかろうもん!:MySQLでcharacter_set_databaseがlatin1になってしまう問題の対応方法

だそうです。

あれれ。
データベースを作成した時に、文字コードを設定しそこねたのかしら。

確認方法
  1. mysql> show create database `databese1`;
  2.  
  3. +-----------+----------------------------------------------------------------------+
  4. | Database  | Create Database                                                      |
  5. +-----------+----------------------------------------------------------------------+
  6. | databese1 | CREATE DATABASE `databese1` /*!40100 DEFAULT CHARACTER SET latin1 */ |
  7. +-----------+----------------------------------------------------------------------+

うほ!確かに。。。

解決方法
  1. mysql> ALTER DATABASE `databese1` default character set utf8;

直った~♪

経緯

問題解決にはあまり関係ないので
記事末に覚え書き用経緯を。

データ情報

駅データ.jp
こちらのサイトから、全国の駅データをいただいてきた。

編集

配布されているデータは、ちゃんと UTF8 なのだけど
データを追加する都合上、Excel で編集してから DB へ流し込んだ。

データが多く、phpMyAdmin からではタイムアウトになってしまったので
コマンドラインから実行。

手順
  1. 配布元よりデータを DL
  2. Terapad で、SHIFT-JIS、CR+LF へ変換
  3. Excel で、データ編集
  4. Excel から CSV 出力
  5. Terapad で、UTF-8N、LF へ変換
  6. コマンドラインより DB へ流し込み

すると、途中から文字化けという事態が起こった。
これはこれで不思議。。。

Posted by muchag | MySQL |
初回投稿:2015-05-22 (金) 22:39:16 | 最終更新:2015-05-22 (金) 23:07:53

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment