みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PSQLExceptionが発生する

javaのプログラムをEclipseでデバッグ中なのですが、
socket通信で取得したString型のデータをPostgreSQL(ver8.3)のtext型に
INSERTすると

org.postgresql.util.PSQLException: ERROR: insufficient data left in message

とエラーが発生してしまいます。

String型の変数infoに格納している文字列を
EclipseのWatchWindowで見ると以下の様な値になっています。

変数名
info    "85E_ A B C t r a k "

※ "A B C t r a k "の部分だけフォントが異なる(ここだけ文字コード違う??)

試しにinfo変数の中身を

byte[] btext = info.getBytes();

でbyte[]型に格納してみたら。
以下の様な値になっていました。

変数名
btext
  [0]   56     ← ASCIIコードの'8'
  [1]   53     ← ASCIIコードの'5'
  [2]   95     ← ASCIIコードの'_'
  [3]   0      ← ?
  [4]   65     ← ASCIIコードの'A'
  [5]   0      ← ?
  [6]   66     ← ASCIIコードの'B'
  [7]   0      ← ?
  [8]   67     ← ASCIIコードの'C'
  [9]   0      ← ?
  [10]   116    ← ASCIIコードの't'
  [11]   0      ← ?
  [12]   114    ← ASCIIコードの'r'
  [13]   0      ← ?
  [14]   97     ← ASCIIコードの'a'
  [15]   0      ← ?
  [16]   107     ← ASCIIコードの'k'
  [17]   0      ← ?

となっています。。
この様な文字列をデータベースに格納するにはどうしたらよいのでしょうか?

ちなみにEcripseでWatchした際に変なフォントになっていない文字列がINSERT
できることは確認済です。

投稿日時 - 2010-12-17 13:26:05

QNo.6390202

すぐに回答ほしいです

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

詳しいことはわかりませんが、フィーリングでいうと、
エラーの原因は文字列のはずのデータに0x00が入っているからで、
一文字置きに0x00が入っているのはUnicode(UTF-16)のバイト列をASCII(もしくはASCII互換の文字コード)で解釈した状況に見えます。
あとJavaは確か文字列をUnicodeで扱っていた気がします。

投稿日時 - 2010-12-18 02:57:51

お礼

回答有難う御座います。

まさにそんな感じなのです。問題は文字列に0x00が入っているからのようです。

で、これが部分的に0x00が入っているのですが可能であればこのままデータベースに
突っ込みたいと思っています。

このような場合はDB側で文字列として扱わない方がよいのでしょうか?
(文字列ではないとすると型をなににすればよかでしょか?)

投稿日時 - 2010-12-20 09:53:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問