- - PR -
DB - Java間の文字コード変換について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-09-24 09:53
DB2クライアント経由で、DB2からデータを取得するJavaプログラムがあります。
DB2の文字コードはEUCです。 ここで質問なのですが、文字コードをJava内部コードのUnicodeに変換するのは 誰の役割なのでしょうか?DB2クライアントがUnicodeにまで変換してくれるのか それともJDBCが変換するのか。。。 DB2の話でなくても構いませんので、DB使用時の文字コード変換に詳しい方、 教えてください。 | ||||
|
投稿日時: 2007-09-25 02:01
MySQLでやったときは、完全にjdbcに設定しました。他のDBでは違うのかもしれません。 MySQLの例は検索すればたくさん出で来るかと。 SQL Server + JDBCでは意識したことがないな。。。きっと他人任せだったからだろうぅ。 | ||||
|
投稿日時: 2007-09-25 11:06
基本的にはJavaの世界に入る境界でUnicodeに変換されます。
Javaという言語自体が内部コードをUnicodeとしていますので 例えばFileのIOであるとか、通信のIOであるとか、 そういう箇所でJavaの世界に入る際に文字コードが変換されます。 JDBCはJavaの世界ですからJDBC内部のDBとJavaの接点の部分で文字コードの変換が行われるのが通常ではないでしょうか。 DB側文字コードがUnicodeであれば変換の手間が少なくてすむ、という話はあると思いますが。 | ||||
|
投稿日時: 2007-09-25 12:17
DB2 のことはまったく知らないのだけど、「DB2クライアント経由で」という表現が気になりました。もしかして、DB2クライアントを基盤として利用する JDBC Type2 ドライバなのかな。
だとしたら、DB2クライアントでプラットフォームエンコーディングへの変換がおこなわれているかもしれないですね。たとえば Windows だったら・・・ DB2(EUC) --> DB2クライアント(MS932) --> DB2 JDBC Type2(Unicode) とか。推測ですけど。 | ||||
|
投稿日時: 2007-09-25 13:27
DB2からレコード取るだけなら、
文字コード変換なんてJavaプログラムではやらないかと。 過去にやった記憶が全くないです。 | ||||
|
投稿日時: 2007-09-25 14:08
DB2に限らない話ですが、だいたいのRDBMSはデータベースエンコーディングとクライアントエンコーディングの2種類の設定を持ちます。呼び方はRDBMSによって異なりますが。データベース→サーバとか、エンコーディング→コードページ/キャラクタセットとか。
データベースとクライアントのエンコーディングが異なる場合は、どこかで変換しないといけないのですが、サーバで行う場合とクライアントで行う場合と両方あります。 DB2はクライアントではなかったかと。つまりJDBC Type4ならドライバ自身ということになりますね。 そのほか知っている範囲では、PostgreSQLはサーバ、Oracleは基本的にクライアントで、JDBC Thinの場合だけサーバ。 JDBCに関しては、どのRDBMSもほぼ共通なのが、クライアントエンコーディングはUTF-8に固定してサーバと通信するという点です。Javaの場合、文字列は最終的にはString(Unicode)にするので、至極妥当なやり方ですよね。 | ||||
|
投稿日時: 2007-09-26 12:53
これなんかは明確な答えになるでしょうか。
http://www-1.ibm.com/support/docview.wss?uid=std3dabd6da4841e6b7f4925704b0007026a クライアントがWindowsだとすると。 サーバーの文字コード(EUC) -> クライアントの文字コード(CP932) -> JDBC(UNICODE) という順番で変換されているようです。 |
1