encoding
Jaybird で接続文字セット ( Firebird 文字セット名を使用するプロパティ、または Java 文字セット名を使用するプロパティ) を指定しない場合、charSet
Jaybird は Firebird の接続文字セットの概念にフォールバックしますNONE
。サーバーは (VAR)CHAR 列のストレージ表現から文字を翻字せず、そのバイトをそのまま送信します。
これは、Jaybird が未知の文字セットで一連のバイトを受信することを意味します。Jaybird は、Java インストールのデフォルトの文字セットを使用して、これらのバイトを文字列に変換します。そのため、データベース (または列) の文字セットが Java の文字セットと一致しない場合、正しくない結果が生成される可能性があります。さらに悪いことに、デフォルトのJava文字セットが異なる異なるシステムからこのように読み書きすると、完全なゴミまたは音訳エラーが発生する可能性があります。
解決策: 常に明示的な接続文字セットを指定します。さらに良いのは、データベースにデフォルトの文字セットがあることを確認することです (または、すべての(VAR)CHAR
列に文字セットが明示的に定義されていることを確認してください)。
Jaybird の次のバージョン (2.3) は、ユーザーにこの問題を考慮するよう強制する明示的な接続文字セットが指定されていない場合、おそらく接続を拒否します (また、古い動作が必要な場合は、明示的に を指定できますencoding=NONE
)。