概要
aptで導入したMySQLのlatin1をやっつける
apt-getで入れるとlatin1なMySQLが
apt-get install mysql-server
でMySQLを導入する方の中にはキャラクターセットがlatin1になってたせいで「日本語が化けるアアアアアアアアア」って人がそこそこいるんじゃないかと思います。
default-character-set=utf8
でやれって記事を見かけると思うんですが、アレはMySQL5.5ではもう廃止されました。「MySQLで文字化けしたからdefault-character-setしたんだけどうまくいかないよ~」はアカンです。バージョンを確認しましょう。
直し方
キャラクターセットを見てみるとデフォルトは多分こんなの
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| 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 | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
このlatin1を駆逐するには
/etc/mysql/my.cnf を開いて、[mysqld]のところに
character_set_server=utf8
と書いて、mysqlをrestartすれば終わりです。service mysql restart
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| 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 | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
クライアントの影響を受けずに常にutf8で返したいときは/etc/mysql/my.cnfに
skip-character-set-client-handshake
を加えましょう。
終わりに
Ubuntu14をVMに突っ込んでMySQLのキャラクターセットの設定をしている最中に
「キャラクターセット周りで困ったから調べたら"default-character-set=utf8"にすればいいって書いてあったのにトラブったことが昔あったなぁ」
というのを思い出して調べてたところ…
思いの外、default-charac(略)でやれってエントリが残ってたんで憤慨してこのエントリを書きました。もう5.5でいいじゃん