• ベストアンサー
  • 困ってます

MySQLからのデータ取得で日本語が文字化けします

  • 質問No.1118005
  • 閲覧数1148
  • ありがとう数26
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (5/5)

質問が削除されてしまったので、再々投稿します。
その1、その2に分けて投稿していたため、削除されてしまいました。
その1の内容のみ投稿します。

現在、データベースにMySQLを使ってJavaでWebアプリケーションを作成しています。

使用環境は以下の通りです:

OS: Windows XP
Java: 5.0
Tomcat: 4.1.31
MySQL: 4.1.7
MySQL Connector/J: 3.0.16

しかしデータベースに日本語のデータを登録し、アプリケーションからデータを読み
出すと必ず文字化けしてしまいます。

JavaアプリケーションからMySQLへ接続する際のURLでは、以下のようにパラメータ
で文字コードを指定しています。

jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=Shift_JIS

これをTomcatの設定ファイル(server.xml)の<Context>/<ResourceParams>の中で指定
しています。

また、MySQLの設定ファイル(my.ini)の中でもデフォルト文字セットを以下のように
指定しています。

default-character-set=sjis


ちなみにJava側からは以下のようにしてデータを取得してきています。

Connection db=null;
PreparedStatement objPs=null;
ResultSet rs=null;

try{
 Context ctx=new InitialContext();
 DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/TestDB");
 db=ds.getConnection();
 objPs=db.prepareStatement("SELECT * FROM bok_inf_tbl ORDER BY published DESC");
 rs=objPs.executeQuery();
      ・
      ・
      ・

JSPの先頭では、以下のようにpageディレクティブを記述しています。

<%@ page contentType="text/html;charset=Shift_JIS" %>

JSPに直接書かれた日本語は文字化けしません。データベースから取得した部分だけが
文字化けします。

この原因について何が考えられるでしょうか。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 20% (1/5)

私も以前同じ現象で困りました。
原因はMySQLの4.1.7バージョンにあるらしいです。

どうしても4.1.7バージョンにこだわるなら以下のコードで対応出来たと思われます。

str = new String(str.getBytes("ISO-8859-1"), "JISAutoDetect");
※str:MySQLから取得して文字化けしてしまうresultsetの項目

ちなみに私はMySQL4.0.21にバージョンダウンして、4.1.7の不具合対応がされるまで待っている状態です。
補足コメント
Prune1976

お礼率 100% (5/5)

b-u-z-zさん、ありがとうございます。

str = new String(str.getBytes("ISO-8859-1"), "JISAutoDetect");
この方法で文字化けを回避することができました。
しかし、特定の文字(表、ソなど)が文字化けする問題は解決しませんでした。
http://www.kent-web.com/pubc/jcode/
ここに書いてある問題です。
これはShift_JIS特有の問題であると思われるので、MySQLの文字コードをEUCに変更してみました。
そうすると今度は(表、ソ)などの文字も文字化けせずに表示できました。
ResultSet#getString()で取得した文字列に対して
str = new String(str.getBytes("ISO-8859-1"), "JISAutoDetect");
といった変換も不要になりました。
ただ、MySQLのコマンドラインクライアントを使ってSELECT文でデータを表示すると日本語は文字化けします。コマンドプロンプトの文字コードがEUCに変更できないからです。
ちょうど昨日、MySQL Query Browserの一般提供が開始されたそうです。これを使うと文字化けしません。
英語版ですがなかなか使いやすいです。
残念なのは、クエリーを入力するところでは日本語が使えないことです。
投稿日時:2004/12/09 14:36
お礼コメント
Prune1976

お礼率 100% (5/5)

ありがとうございました。
結局私もバージョンダウンすることにしました。
そうすることで問題なく動きました。

うまくいった環境は以下です:
OS:Windows XP ServicePack 2
Java:1.4.2_06
Tomcat:4.1.31
MySQL:4.0.22
MySQL Connector/J:3.0.16
かねやんMySQLAdmin(SJIS版):1.43
投稿日時:2004/12/09 18:29
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ