MJ-WAVE.COM

  1. MJ-WAVE.COM
  2. Web開発
  3. MySQLデータベースにINSERTした時、マルチバイトの文字列が文字化けしてしまう場合の対処法。(MySQL5.6.10)

MySQLデータベースにINSERTした時、マルチバイトの文字列が文字化けしてしまう場合の対処法。(MySQL5.6.10)

ツイート
このエントリーをはてなブックマークに追加

JavaでデータベースにINSERTするメソッドを書いてみたら、まぁハマったのでメモ。
PreparedStatementオブジェクトを使って、データベースにINSERTしてます。

//INSERTを実行するメソッド
private void insert(Connection conn) throws Exception {
	String sql = "INSERT INTO `db`.`todo_list` ( `title`, `task`, `limitdate`, `lastupdate`, `user_id`, `status` " + ") VALUES ( ? , ? , ? , now(), ? , ? );";
		
	PreparedStatement statement = conn.prepareStatement(sql);
		
	statement.setString(1, "タスクのタイトル");
	statement.setString(2, "タスクの詳細内容が入ります");
	statement.setString(3, "2012-06-12");
	statement.setString(4, "USER99");
	statement.setInt(5, 0);
		
	statement.executeUpdate();
}

問題なく実行されて書き込めてるかなーと思って、MyPhpAdminで内容を確認してみると唖然。
日本語(マルチバイト文字)の部分が「????」になってしまいました。

db-hatena

どうやらこれはMySQL側の文字コードの設定(データベースキャラクタセット)がよろしくないようで、macのターミナルで下記コマンドを実行してmy.cnfファイルを編集する必要があるみたいです。(my.cnfファイルがない場合は作っちゃいます)

$ sudo vim /etc/my.cnf

my.cnfの[client][mysqld][mysqldump][mysql]、それぞれの項目に文字コードを設定します。既存のコードがある場合は、行を追加する形で記述します。
ここで注意なのがMySQL5.5以降だと[mysqld]の項目に記述するのはdefault-character-setではなく、character-set-serverと記述する(ここでめっちゃハマった)。5.4以前は全部一緒でよかったんですね。あと、UTF-8はハイフン(-)抜きの「utf8」と記述します。

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

保存したら、下記のコマンドを実行してMySQLを再起動しましょう。

$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop
$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start

これで設定は完了なので、さっきのサーブレットを実行してデータベースを見てみると・・

db-ok

無事、日本語が表示されましたー。いやー、出だしからつまづいたけど、何とか乗り越えた。

もし、この記事が役に立ったらシェアしてくださいね!

ツイート
このエントリーをはてなブックマークに追加

RECOMMEND BOOKS 筆者オススメ!! この記事に関連する書籍一覧

この記事に関連する書籍はありません