MySQLで文字化けしないようにする設定

MySQLはちゃんと設定していれば文字化けなんて滅多に起こさない(というかこの世界はちゃんと設定してさえいえば文字化けなんて起きない)わけですが、いつもいつも自分がすべて設定したものとは限らないわけで、ダンプとリストアの間で文字化けが起こってしまったります。データ量が多い上に仕事だとかなりビビリますが、基本的なことを覚えてしまえばMySQLに関してはそんなに酷いことにならない模様です。

専用サーバーとかでコマンドが使えて、/etc/mysql/my.cnfが変更できる場合

以下のコマンドで文字コードを確認
mysql> show variables like 'character_set%'; (または、status)
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 ¦ latin1 ¦
¦ character_set_system ¦ utf8 ¦
¦ character_sets_dir ¦ /usr/share/mysql/charsets/ ¦
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

character_set_databaseがlatin1とかになっているのが気持ち悪いです。/etc/mysql/my.cnfで以下を追加します。

[client]
default-character-set=utf8

[mysqld]
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

追加設定が終わったら再起動
service mysqld restart
以下のようにutf8で揃っていたら大丈夫です。
mysql> show variables like 'character_set%';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 36
Current database: *** NONE ***

+--------------------------+----------------------------+
¦ 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/ ¦
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

レンタルサーバーとかの場合

/etc/mysql/my.cnfが触れない場合、ダンプやリストアの際にはオプションを指定すると何とかなります。作成した文字コードのまま作業する場合、
--default-character-set=binary
を指定します。
mysqldump --default-character-set=binary -h localhost -u USER -pPASSWD USER_DATABASE > USER_DATABASE.sql
という感じで文字化けを回避できるかもしれないです。
ちなみにさくらレンタルサーバーは、ダンプ時の文字コード設定が、default-character-set=ujisというむちゃくちゃな設定。なので、--default-character-set=binaryを使わないとUTF-8で作成しているデータベースに関しては確実に文字化けします。