MySQLの文字コード設定
10/04/28
よくご存知の方からすれば他愛もないことかとは思いますが、私が2つ前のブログで行ったHibernateのサンプル稼働について、日本語の文字が文字化け(????化)していたので、対策をここにまとめておきます。私のMySQLの設定が足りなかったようです。
[mysqld]
default-character-set=utf8
[mysql]
default-character-set=utf8
my.cnfは一番最後にMySQLサーバーに読み込まれる、~/.my.cnfを編集しています。
現状の文字コードがどうなっているかは、MySQLクライアントで以下のように入力すると確認できます。
mysql>SHOW VARIABLES LIKE 'character_%';
¦ character_set_client | utf8 |
¦ character_set_connection | utf8 |
¦ character_set_database | utf8 |
¦ character_set_filesystem | binary |
¦ character_set_results | utf8 |
¦ character_set_server | utf8 |
mysql>SHOW CREATE TABLE BOOK;
BOOK | CREATE TABLE `BOOK` ( |
`ISBN` char(17) CHARACTER SET latin1 NOT NULL,
`NAME` varchar(64) CHARACTER SET latin1 NOT NULL,
`PRICE` int(11) NOT NULL,
PRIMARY KEY (`ISBN`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |これをALTER TABLEで「NAME」カラムの文字コードの変更を行いました。
ALTER TABLE BOOK CHANGE NAME NAME varchar(64) charset utf8 NOT NULL;
上記変更の実行後、SHOW CREATE TABLEで確認してみると、
SHOW CREATE TABLE BOOK;
BOOK | CREATE TABLE `BOOK` ( |
`ISBN` char(17) NOT NULL,
`NAME` varchar(64) CHARACTER SET utf8 NOT NULL,
`PRICE` int(11) NOT NULL,
PRIMARY KEY (`ISBN`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |となります。
上記の2点に記載した、MySQLのサーバー、クライアント、テーブルの文字コードをutf8で揃えることにより、Hibernateによる更新結果の文字化けを防ぐことができました。
MySQLについては、以下の本を参考にしています。
MySQL 辞典 (Desktop reference)
設定ファイルの記入法などは少し読みづらいところもありますが、(何よりSQL自体、記述量が多いせいもあるとは思いますが、)慣れれば手放せなくなる本です。この本は初めての方が最初からじっくり読む本ではなく、完全なるリファレンスブックです。