これはおそらく起こることです:
- クライアントの文字セットはCP1252またはISO-8859-15のようなものである必要がありますが、実際にはクライアントは実際にUTF8を使用しています。
- この文字セット(UTF8)では、記号
á
2バイトかかるため、クライアントはこれらの2バイトを送信し、OracleにこれらをCP1252として扱うように指示します。 CP1252では、2文字の2バイトコードにより、DBは入力を2文字として解釈するため、length('à')
2に等しい(そしてこの文字列を挿入した場合、挿入の結果はà
に等しくなりません ) - 文字セットを正しく設定すると、入力はoracleによって1文字として正しく扱われ、その長さは1(2バイトのまま)です。
結論:クライアントの文字セットを適切に設定しないと、翻訳エラーが発生します(この方法では不正な文字は取得されませんが、奇妙な記号が表示される可能性があります(¿
。
データベースの文字セットは作成時に設定され、通常はエクスポート/空のデータベースの作成/インポートによって変更されます。