- 締切済み
JAVAでMySQLに接続すると日本語が化ける
似たような質問がいくつかありますが、どれも解決には至らなかったため質問させていただきます。 以下のような環境でMySQLにレコードを追加するプログラムを作成しましたが、どうしても日本語が文字化けします。 解決方法をご存知の方、心当たりのある方は、何卒ご教授お願いします。 MySQLの使用文字コードの設定は下記の通りです character_set_client: utf8 character_set_connection: utf8 character_set_database: utf8 character_set_filesystem: binary character_set_results: utf8 character_set_server: latin1 character_set_system: utf8 データベースおよびテーブルは下記のように作成しました create database test default character set utf8; create table test ( text text ); Javaのソースコードは以下です import java.sql.*; public class MySQL { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); Connection db = DriverManager.getConnection("jdbc:mysql://localhost/?useUnicode=true&characterEncoding=UTF-8", "root", ""); Statement sql = db.createStatement(); sql.execute("use test;"); sql.execute("insert into test values('ほげほげ');"); ResultSet results = sql.executeQuery("select * from test"); db.close(); } catch (Exception e) { System.out.println("can't connect the database (" + e + ")"); } } } これを以下のように実行します $ javac -encoding UTF-8 MySQL.java $ java -Dfile.encoding=UTF-8 MySQL これでもかというぐらいUTF-8で統一してますが、 それでも、???? のように文字化けします。 試せることは全てやってみましたがどうにも解決できません。 ご助力よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- nora1962
- ベストアンサー率60% (431/717)
これで日本語入力できるようになりませんか。 http://curiousabt.blog27.fc2.com/blog-entry-65.html
- choconamacream
- ベストアンサー率44% (152/338)
普段はLinux使いですが、Macの方は見たことはあるけど使ったことは無いので、「一般人」で。 補足欄を見る限り、原因はJavaやMySQLではなくMacの方みたいですね。 Mac : Terminal(ターミナル)の日本語環境設定 http://groundwalker.com/blog/2007/05/mac_japanized_terminal.html Mac OS X ターミナルでの日本語の扱いについて http://homepage3.nifty.com/toshi3/osx2t.html 最新の5.0.85をインストールする前に、取り敢えずは上記のサイトを元にターミナルから日本語の表示や、日本語の入力などができるようにすべきかと。
- nora1962
- ベストアンサー率60% (431/717)
確認ですがターミナルからのmysqlコマンドでinsert,selectした場合は文字化けはおきないのでしょうか? 後、お使いのMySQLのバージョンは何ですか?
補足
ご回答ありがとうございます。 MySQLのバージョンは5.0.82でした。 Terminalに日本語が入力できないので、 コマンド入力を試すことが出来ませんでした。 (色々試したのですが、どうも入力できません)
- nora1962
- ベストアンサー率60% (431/717)
> character_set_server: latin1 が気になります。 my.cnfの[mysqld]セクションで character-set-server = latin1 collation-server = latin1_general_ci になっていませんでしょうか。なっていたら削除して default-character-set = utf8 に変更してみては。
補足
ご回答ありがとうございます。 ローカル環境で実践していますので、character_set_server はあまり関係の内容がないと考えていました。 my.cnfは予め以下のように書いてあります。 にも関わらずcharacter_set_serverは変わりませんでした。 [mysqld] default-character-set = utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8
ものすごく初歩的なことで申し訳ないが……。これは、Windowsだろうか。だとすると、コマンドプロンプトから実行しているんだろうか。コマンドプロンプトは文字コードがMS932(SJIS)だから、UTF-8の文字はそのまま出力すれば文字化けすると思うが……。 あるいは、Eclipseなどを使っているのだろうか。とすると、コンソールの文字コードはちゃんとUTF-8になってるだろうか。 そのへんが問題ないとすると、例えばEclipseのデータソースエクスプローラーとか、あるいはphpMyAdminとかいったMySQLの管理ツールを使ってデータの作成や表示などを確認してみるとヒントになるかも知れない。
補足
ご回答ありがとうございます。 情報不足で申し訳ありませんでした。 Macのターミナル上で動かしています。 ターミナルの表示文字コードはUTF-8です。 ターミナルの文字コードがUTF-8で、 mysql> select * from test とやって文字化けしているので、 やはりDBへの格納に失敗してるのでないかと考えてます。
補足
ご回答ありがとうございます。 返信が遅れて申し訳ありません。 教えていただいたサイトは既に参照し、 日本語入力を試みましたができませんでした。 ただ、試行錯誤を繰り返し、なんとか入力/表示は可能になりました。 ターミナルからinsert すると正常になります。 しかし、プログラムからだと文字化けの形式は変わったものの、正常に表示はされないままです。