MySQLの文字コード設定

10/04/28
よくご存知の方からすれば他愛もないことかとは思いますが、私が2つ前のブログで行ったHibernateのサンプル稼働について、日本語の文字が文字化け(????化)していたので、対策をここにまとめておきます。私のMySQLの設定が足りなかったようです。


  1. MySQLのサーバーとクライアントの文字コード型をそろえる。
  2. 僕のPCに導入してあるMySQL文字コードはデフォルトの「latin1」のままでした。サーバープログラム及びクライアントプログラムの文字コードを変更するため、MySQLの設定ファイルであるmy.cnfに以下の文を追加しました。
    [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                                                                |
    
  3. テーブルの文字コードを変更する。
  4. 作成したテーブルのSHOW CREATE TABLEを確認してみると、日本語が入る「NAME」カラムがデフォルトの「latin1」のままでした。
    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自体、記述量が多いせいもあるとは思いますが、)慣れれば手放せなくなる本です。この本は初めての方が最初からじっくり読む本ではなく、完全なるリファレンスブックです。