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

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

b-u-z-z さんからの 回答

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

  • 2004/12/09 09:05
  • 回答No.1
  • ベストアンサー
b-u-z-z

ベストアンサー率 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
  • JDBCに初めて挑戦しようとしたのですが。 Java

    「JAVA+MySQL+Tomcatで始めるWebアプリケーション開発入門」という本でJDBCに初めて挑戦しようとしたのですが、下記のようなエラーが出てうまく実行できませんでした。 java.sql.SQLException: Access denied for user: 'Mulder@localhost' (Using passwor d: YES) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:771) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1229) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2558) at com.mysql.jdbc.Connection.<init>(Connection.java:1485) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java :266) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at JdbcTest.main(JdbcTest.java:12) Exception in thread "main" java.lang.NullPointerException at JdbcTest.main(JdbcTest.java:24) 原因など、わかる方がいたら教えていただきたいです。 よろしくお願いします。...

  • Tomcat6のコネクションプーリングについて Java

    Tomcat6のコネクションプーリングについて 現在、以下の環境で開発を行っているのですが、 データソースからConnectionを取得できていない状況です。 過去に同様の内容が記載されていたのですが、 内容が理解できず投稿させていただいております。 【フォルダ構成】 test  |  |--META-INF  |   |  |   --context.xml  |  |--WEB-INF     |      --web.xml 【環境】 Windows XP Pro Eclipse3.3.2 apache2.2 tomcat6.0 jdk1.6.0_18 mysql-connector-java-5.1.12-bin.jar Struts2 以下に、context.xml、web.xml及び、サーブレットのコードを記載します ■web.xml=========== <?xml version="1.0" encoding="UTF-8"?> ~~(抜粋)~~ <resource-ref> <res-ref-name>test</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app> ■context.xml======= <?xml version="1.0" encoding="UTF-8"?> <Context displayName="test" docBase="test" path="/test" reloadable="false"> <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" username="root" password="root" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=UTF-8" maxActive="4" maxWait="5000" maxIdle="2" validationQuery="select cont(*) from db_fuzoku" /> </Context> ■サーブレットコード(抜粋)===== public class test_Dao { DataSource ds; public ArrayList select(){ ArrayList list = new ArrayList(); try { // 初期コンテキストを取得 Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); // ルックアップしてデータソースを取得 ds = (DataSource) envCtx.lookup("jdbc/test"); } catch (Exception e) { e.printStackTrace(); } Connection con = null; Statement stmt = null; try { // データソースからConnectionを取得 con = ds.getConnection(); ==================== 以上、よろしくお願いします。...

  • MySQLでJDBC接続をTomcatで接続できないです。。。。 MySQL

    JDBC接続を現在勉強しています。 そこで、eclipseの中にTomcatをプラグインして、javaからデータベースに接続を心みているのですが、エラーが出て自分なりにいろいろ試したのですが、どうしてもエラーが消えません。 ご指摘いただけたらと思います。 エラー内容 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 環境内容 windows xp professional Eclipse 3.3 (C:\eclipse) Tomcat 5.5 (C:\eclipse\servers\tomcat-5.5) java (C:\Program Files\Java\jdk1.6.0_06) MySQL (D:\mysql-5.0.67-win32 データベースはDドライブにおいています) JDBCドライバー mysql-connector-java-5.1.6-bin.jar(C:\eclipse\servers\tomcat-5.5\common\libの配下に設定) PATHの設定 CLASSPATH C:\eclipse\servers\tomcat-5.5\common\lib javaのソースコード import java.sql.*; public class JdbcMySQLTest { public static void main(String[] args) { try { // ドライバクラスをロード Class.forName("com.mysql.jdbc.Driver"); // MySQLの場合 // データベースへ接続 String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM HELLO_WORLD_TABLE"; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); // 検索された行数分ループ while (rs.next()) { // NOを取得 int no = rs.getInt("NO"); // 言語を取得 String lang = rs.getString("LANGUAGE"); // メッセージを取得 String msg = rs.getString("MESSAGE"); // 表示 System.out.println(no + " " + lang + " " + msg); } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } 上記コードをEclipseから実行しますとコンソール上に java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at jp.co.Beas.JdbcMySQLTest.main(JdbcMySQLTest.java:11) になってしまいます。 JdbcMySQLTest.java:11からcom.mysql.jdbc.Driverが ないですよ~といっているのは理解しているのですが そこでいろいろドライバーの配置などを変更したのですが エラーがやはりかわりません。 ながながとなって申し訳ございませんが、ご教授いただけたらと思います。...

  • javaからmysqlに接続ができません。 Java

    よろしくお願いします。 JavaからMySqlに接続ができなくて困っています。 <環境> OS:Windows XP JDK : jdk1.6.0_02 JDBC Driver for MySQL : mysql-connector-java-5.1.5-bin.jar Java、MySql単体では正常に動作しているようですが、ドライバを認識できず、JavaからMySqlに接続することができません。 ---コード------------------------------------------ import java.net.*; import java.sql.*; public class SqlSample1{ String url = "jdbc:mysql://localhost/test_db"; String user = "root";//ユーザ名 String pass = "admin";//パスワード Connection con = null; //コンストラクタ public SqlSample1(){ init();//初期化 fin();//終了 } //初期化 public void init(){ try{ //ドライバのロード Class.forName("org.gjt.mm.mysql.Driver"); //MySQLサーバへの接続 con = DriverManager.getConnection(url,user,pass); System.out.println("Connected!!"); }catch(SQLException e){ System.err.println("SqlException:\n"+e.toString()); }catch(Exception e){ e.printStackTrace(); } } //終了:開放 public void fin(){ try{ con.close(); System.out.println("Closed."); }catch(SQLException e){ System.err.println("SqlException:\n"+e.toString()); }catch(Exception e){ e.printStackTrace(); } } public static void main(String args[]){ SqlSample1 ss1=new SqlSample1(); } } ----------------------------------------------------------- ----エラーメッセージ--------------------------------------- SqlException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure Last packet sent to the server was 0 ms ago. java.lang.NullPointerException at SqlSample1.fin(SqlSample1.java:41) at SqlSample1.<init>(SqlSample1.java:18) at SqlSample1.main(SqlSample1.java:53) ------------------------------------------------------------ ※C:\mysql-connector-java-5.1.5の下のmysql-connector-java-5.1.5-bin.jarファイルにCLASSPATHを設定しています。 初心者のためへたくそな質問になっているかもしれません。 申し訳ありません。 上記の情報が不十分な場合はご指摘をお願い致します。...

  • EclipseのJDBCドライバーについて Java

    Eclipse3.1、MySQL、Tomcat、をインストールして、JDBCドライバーをインストールしました。(features、pluginsをEclipseのフォルダ内に上書き保存) また、Javaのファイル\jdk1.5.0_05\lib\extと、\jre1.5.0_05\lib\extの\両方に(本当はどちから一方でいいのですが、わからなかったので)mysql-connector-java-3.1.11のフォルダとmysql-connector-java-3.1.11-bin.jarをコピーしました。 MySQLにてテーブルを作成して、これをEclipseから呼び出そうとしました。DbEditに切り替えてtableタグの中に新しいデータベースの設定を行い、呼び出そうとしましたが、エラーが出ました。サーバーのURLである、jdbc:mysql://host/MySQLdataに接続できないといったメッセージです。 どこを確認したらよろしいかを経験者の方ご教授お願いします。 Eclipse3.1、MySQL、Tomcatは書籍の付録CDからですので、バージョンの整合性は合っています。 Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION **... dbedit.core.DataException: Couldn't connect to:jdbc:mysql://host/MySQLdata com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.UnknownHostException MESSAGE: host: host STACKTRACE: java.net.UnknownHostException: host: host at java.net.InetAddress.getAllByName0(Unknown Source) at java.net.InetAddress.getAllByName0(Unknown Source) at java.net.InetAddress.getAllByName(Unknown Source) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:137) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2541) at com.mysql.jdbc.Connection.<init>(Connection.java:1474) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) at dbedit.internal.core.JdbcManager.internalOpenConnection(JdbcManager.java:1751) at dbedit.internal.core.JdbcManager.openConnection(JdbcManager.java:804) at dbedit.internal.core.Dataspace.openConnection(Dataspace.java:217) at dbedit.internal.core.Database.connect(Database.java:61) at dbedit.ui.internal.ConfigureConnectionsAction$Opener.run(ConfigureConnectionsAction.java:185) ** END NESTED EXCEPTION ** Last packet sent to the server was 0 ms ago....

ページ先頭へ