※ ChatGPTを利用し、要約された質問です(原文:MySQLからのデータ取得で日本語が文字化けします)
MySQLからのデータ取得で日本語が文字化けする
このQ&Aのポイント
MySQLを使用してJavaでWebアプリケーションを作成していますが、データベースから日本語のデータを読み込む際に文字化けしてしまいます。
接続URLや設定ファイルに文字コードを指定しているにもかかわらず、データの取得部分でのみ文字化けが発生します。
原因は不明ですが、可能性としてはデータベースや接続設定の文字コードの設定が正しくないか、データベースとアプリケーションの文字コードの不一致が考えられます。
MySQLからのデータ取得で日本語が文字化けします
質問が削除されてしまったので、再々投稿します。
その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に直接書かれた日本語は文字化けしません。データベースから取得した部分だけが
文字化けします。
この原因について何が考えられるでしょうか。
お礼
ありがとうございました。 結局私もバージョンダウンすることにしました。 そうすることで問題なく動きました。 うまくいった環境は以下です: 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
補足
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の一般提供が開始されたそうです。これを使うと文字化けしません。 英語版ですがなかなか使いやすいです。 残念なのは、クエリーを入力するところでは日本語が使えないことです。