java.sql.ResultSet.getString(1) から文字列を取得しているとしましょう。そして、この文字列から String.getBytes() を呼び出しました。
結果セットがクエリされたデータベースで使用されている文字セットに関係なく、同じ結果が得られますか? つまり、異なるデータベース間で (異なる文字セットを使用して) 手順を実行した場合、getBytes を呼び出した後に同じ結果が得られますか?
java.sql.ResultSet.getString(1) から文字列を取得しているとしましょう。そして、この文字列から String.getBytes() を呼び出しました。
結果セットがクエリされたデータベースで使用されている文字セットに関係なく、同じ結果が得られますか? つまり、異なるデータベース間で (異なる文字セットを使用して) 手順を実行した場合、getBytes を呼び出した後に同じ結果が得られますか?
はい。
データベースに格納されているバイトは、文字列で Unicode 文字に変換されます。
char
String s を、文字エンコーディングとして指定した (またはシステムがデフォルト設定した) バイトに変換します。
Database bytes -> String chars -> Your bytes
DB encoding Your encoding
データベース内のバイトを正しくデコードしていないデータベースまたは JDBC で何かが台無しになっている場合、文字列は間違っています。たとえば、バイトがチェコ語の UTF-8 エンコーディングであり、西洋のエンコーディングまたは Windows 標準のエンコーディングを使用してデコードすると、文字列が正しくなくなります。文字列を印刷すると、アクセント付きの文字が分数やおかしな文字の組み合わせのように見えることがわかります。
ただし、文字列に入るものはすべて、指定した文字セットに従ってエンコードされます。
依存します。データベースのエンコーディングはロールを果たします。データベースのエンコーディングがlatin1であるが、その文字セット(utf-8 char)の外にあるものを保存している場合、意味不明なものを値として保存します。その悪い値のバイトを取得しても、元の値と同じにはなりません。