
質問が削除されてしまったので、再々投稿します。
その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ベストアンサー
- 回答日時:
私も以前同じ現象で困りました。
原因は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の不具合対応がされるまで待っている状態です。
この回答への補足
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の一般提供が開始されたそうです。これを使うと文字化けしません。
英語版ですがなかなか使いやすいです。
残念なのは、クエリーを入力するところでは日本語が使えないことです。
ありがとうございました。
結局私もバージョンダウンすることにしました。
そうすることで問題なく動きました。
うまくいった環境は以下です:
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
何にかが違うから エラーなんで...
-
mysqlがインストールされている...
-
#1062 - '0' は索引 'PRIMARY' ...
-
MAMP 99ドル約1.6万円 高い...
-
あってますか?SQL
-
SQLを作ったのですがうまくいき...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
〜のような結果を出すためのSQL...
-
SQLです!!教えてください。あ...
-
エラー 1068 (42000): 複数の主...
-
ある時間以内の利用者の抽出に...
-
同一日に複数レコードがある場...
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
-
SQLです教えてくださいお願いし...
-
utf8bomとutf8mb4の違いがいま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるDBから別のDBのテーブルをs...
-
SQLServerのselect文でデータ数...
-
mySQLのデータベースにhtmlのコ...
-
utf8bomとutf8mb4の違いがいま...
-
リストアするとファイルが消える
-
Amazon.comの「MARC」データベ...
-
バッチファイルではパスワード...
-
MYSQLが優位な点は?
-
access VBAを勉強中です。DA...
-
物件検索システム
-
htmlタグを含んだ文字のデータ...
-
PHPで生成した値をデータベース...
-
rubyを使って、webページを作る...
-
MySQLの権限の設定について
-
MySQLにADOを使用して接続でき...
-
データベースに配列を格納する
-
質問
-
データベース容量
-
PHPを使ってデータの抜き出し
-
どの程度のデータベースなら、c...
おすすめ情報