MySQL 5.1 系と MySQL 5.5 系の文字コード

MySQL をインストールしたら、root のパスワードを設定した後に、文字コードの設定をするが、エラーが発生。しばらく調べてみたら、 MySQL 5.5 系では文字コードの設定方法が変更されていた。

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/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

MySQL 5.1 系の場合

[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8

MySQL 5.5 系以降の場合

[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8

というように、mysqld の文字コードを設定する設定名が「default-character-set」から「character-set-server」に変更されていた。DB のバージョンアップはなかなか行わないから気が付かないよねという考え方と、なかなかバージョンアップしない DB をバージョンアップするのだから、事前に調べろよという考え方があると思うけれど、何か起きてから調べるという意識はなかなか変わらない…。

my.cnf を設定する

FreeBSD の場合、ports からインストールしたばかりの時は、my.cnf がないのでサンプルから my.cnf を作成する。

% sudo cp /usr/local/share/mysql/my-medium.cnf /usr/local/etc/my.cnf
% sudo chmod 0644 /usr/local/etc/my.cnf
% sudo vi /usr/local/etc/my.cnf
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8

と設定をしたら、mysqld を再起動させる。

% sudo /usr/local/etc/rc.d/mysql-server restart
Stopping mysql.
Waiting for PIDS: 902.
Starting mysql.

そして、設定が反映されているかを確認する。

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/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.01 sec)