- PR -

PostgresでJDBCを使用してSQL_ASCIIのDBに日本語を登録したい。

投稿者投稿内容
未記入
会議室デビュー日: 2005/04/22
投稿数: 6
投稿日時: 2005-04-22 18:31
はじめまして、初めて投稿させていただきます。
環境
Red Hat Linux release 9 (Shrike)
j2sdk1.4.2_07
jakarta-tomcat-5.0.28
PostgreSQL7.3.2
を使用しています。

この環境で、エンコーディングがSQL_ASCIIのPostgresのDBにJDBC経由で日本語を登録したいのですが、うまく登録できません。
いろいろ、調べたのですが情報が、ほとんどありませんでした。
普通なら、DBのエンコーディングをEUC-JPにするべきだと思うのですが。
既存のシステムがSQL_ASCIIを使用して作られてしまっているので変更できません。
既存のシステムは、Servletを使用せずにCGI経由で登録を行っていたため問題がありませんでした。
どなたか、JDBC経由でSQL_ASCIIのDBに日本語を登録する方法を、ご存じの方おられないでしょうか?
よろしくお願いします。


カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2005-04-23 04:12
一口に日本語といっても、シフトJISとか日本語EUCとか、いろいろなエンコーディングがあるのですが、UTF-8なら何も考えずにいけるはずです。

シフトJISとか日本語EUCで格納したければ、JDBCドライバのソースをいじるしかないと思います。

ここらへんはJDBCドライバのソースを入手して、org.postgresql.jdbc1.AbstractJdbc1Connection#openConnection(String, int, Properties, String, String, Driver)を見ると分かってきます。
未記入
会議室デビュー日: 2005/04/22
投稿数: 6
投稿日時: 2005-04-25 18:31
お返事、ありがとうございます。
返信が、遅くなってしまってすいません。
現在、試しているのはUTF-8です。
Servletにて
request.setCharacterEncoding("UTF-8"); でリクエストを取得しています。
取得したリクエストを元に、
query文字列を作成して下記のように実行しています。
Statement stmt = con.createStatement();
int NumOfUp = stmt.executeUpdate(query);
stmt.close();
このやり方ですと、文字化けが起こってしまいます。
query文字列に
String newQuery = new String(query.getBytes("UTF-8"), "8859_1");
しても、文字化けしてしまいました。
なにか、考えられる原因はあるでしょうか?
よろしくお願いします。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2005-04-25 18:54
引用:

未記入さんの書き込み (2005-04-25 18:31) より:
このやり方ですと、文字化けが起こってしまいます。



そのやり方でいいはずなんですが、文字化けはどのように確認していますか?
未記入
会議室デビュー日: 2005/04/22
投稿数: 6
投稿日時: 2005-04-25 19:09
引用:

そのやり方でいいはずなんですが、文字化けはどのように確認していますか?



文字化けは、Tera Termにて確認しています。
Tera Termのコンソールにて正常に出力されることを期待しているのですが。
JDBCにてデータを取得して
response.setCharacterEncoding("UTF-8");
をして、画面に表示すると正常に見れるのですが。

CGIから、登録されたものは正常に見えています。
もしかしたら、何か勘違いをしているかもしれませんが。
よろしくお願いします。

未記入
会議室デビュー日: 2005/04/22
投稿数: 6
投稿日時: 2005-04-25 19:25
たびたび、すいません。
いま、確認したのですがTera Termのrecieve、transmitのプロパティがEUCになっていました。
ということは・・・
SQL_ASCIIにEUC-JPのエンコーディングの文字列を登録すればよいということでしょうか?
そうなると、JDBCドライバを修正しなくては、ならないんだと思うのですが。
PostgreSQL7.3.2のJDBCのソースというのは、どこで手に入るのでしょうか?
Postgresのサイトで探したのですが、ソースがありませんでした。
知っていたら、教えていただけますか?よろしくお願いします。

カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2005-04-25 19:46
たぶんデータベースには正しくUTF-8で登録されています。
なので、文字化けはPostgreSQLやJavaの問題ではなく、ターミナルの問題です。

TeraTermで文字化けせずに参照できることが目的ですか? それならUTF-8に対応したターミナルソフトを使って下さい。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2005-04-25 19:48
あれ? もしかしてSQL_ASCIIのデータベースに日本語データをEUC-JPで保存したいというご要望ですか?

だったらそれは無理です。JDBCドライバをいじらないといけません。

JDBCドライバのソースはPostgreSQL本体のソースにくっついてきます。

スキルアップ/キャリアアップ(JOB@IT)