- PR -

DB - Java間の文字コード変換について

1
投稿者投稿内容
おひろ
ベテラン
会議室デビュー日: 2003/07/23
投稿数: 63
投稿日時: 2007-09-24 09:53
DB2クライアント経由で、DB2からデータを取得するJavaプログラムがあります。
DB2の文字コードはEUCです。
ここで質問なのですが、文字コードをJava内部コードのUnicodeに変換するのは
誰の役割なのでしょうか?DB2クライアントがUnicodeにまで変換してくれるのか
それともJDBCが変換するのか。。。
DB2の話でなくても構いませんので、DB使用時の文字コード変換に詳しい方、
教えてください。
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2007-09-25 02:01
引用:

おひろさんの書き込み (2007-09-24 09:53) より:
ここで質問なのですが、文字コードをJava内部コードのUnicodeに変換するのは
誰の役割なのでしょうか?DB2クライアントがUnicodeにまで変換してくれるのか
それともJDBCが変換するのか。。。



MySQLでやったときは、完全にjdbcに設定しました。他のDBでは違うのかもしれません。
MySQLの例は検索すればたくさん出で来るかと。

SQL Server + JDBCでは意識したことがないな。。。きっと他人任せだったからだろうぅ。

nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-09-25 11:06
基本的にはJavaの世界に入る境界でUnicodeに変換されます。
Javaという言語自体が内部コードをUnicodeとしていますので
例えばFileのIOであるとか、通信のIOであるとか、
そういう箇所でJavaの世界に入る際に文字コードが変換されます。

JDBCはJavaの世界ですからJDBC内部のDBとJavaの接点の部分で文字コードの変換が行われるのが通常ではないでしょうか。
DB側文字コードがUnicodeであれば変換の手間が少なくてすむ、という話はあると思いますが。

未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2007-09-25 12:17
DB2 のことはまったく知らないのだけど、「DB2クライアント経由で」という表現が気になりました。もしかして、DB2クライアントを基盤として利用する JDBC Type2 ドライバなのかな。

だとしたら、DB2クライアントでプラットフォームエンコーディングへの変換がおこなわれているかもしれないですね。たとえば Windows だったら・・・

 DB2(EUC) --> DB2クライアント(MS932) --> DB2 JDBC Type2(Unicode)

とか。推測ですけど。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2007-09-25 13:27
 DB2からレコード取るだけなら、
文字コード変換なんてJavaプログラムではやらないかと。
過去にやった記憶が全くないです。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-09-25 14:08
DB2に限らない話ですが、だいたいのRDBMSはデータベースエンコーディングとクライアントエンコーディングの2種類の設定を持ちます。呼び方はRDBMSによって異なりますが。データベース→サーバとか、エンコーディング→コードページ/キャラクタセットとか。

データベースとクライアントのエンコーディングが異なる場合は、どこかで変換しないといけないのですが、サーバで行う場合とクライアントで行う場合と両方あります。
DB2はクライアントではなかったかと。つまりJDBC Type4ならドライバ自身ということになりますね。
そのほか知っている範囲では、PostgreSQLはサーバ、Oracleは基本的にクライアントで、JDBC Thinの場合だけサーバ。

JDBCに関しては、どのRDBMSもほぼ共通なのが、クライアントエンコーディングはUTF-8に固定してサーバと通信するという点です。Javaの場合、文字列は最終的にはString(Unicode)にするので、至極妥当なやり方ですよね。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2007-09-26 12:53
これなんかは明確な答えになるでしょうか。

http://www-1.ibm.com/support/docview.wss?uid=std3dabd6da4841e6b7f4925704b0007026a

クライアントがWindowsだとすると。
サーバーの文字コード(EUC) -> クライアントの文字コード(CP932) -> JDBC(UNICODE)
という順番で変換されているようです。
1

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