NLS 文字エンコーディングが異なるデータベースがいくつかあります。1 つはAL32UTF8
(UTF-8) を使用し、もう 1 つはWE8MSWIN1252
(Windows 1252) を使用します。はい、これは悪いことです。同じになるように、物事を正すように働きかけます。それまでの間、非 ASCII 文字を含む SQL を作成する必要があります。たとえば、U+00E1
Unicode の á を使用する必要があります。UTF-8 では 16 進値0xC3A1
で表され、Windows 1252 では 16 進値で表されます0x00E1
。(つまり、それらはバイト値です。)
したがって、これにより、UTF-8 データベースで必要なものが得られます。
SELECT CHR(TO_NUMBER('C3A1', 'xxxx')) FROM DUAL;
これにより、Windows 1252 データベースで必要なものが得られます。
SELECT CHR(TO_NUMBER('00E1', 'xxxx')) FROM DUAL;
ただし、Oracleに1つだけを取得して正しいエンコーディングに変換させる方法を理解できないようです。最終的にどの表現を使用するかはあまり気にしません。同じスクリプトを両方のデータベースで実行する必要があるため、1 つの 16 進数値のみを使用したいだけです。どうやってやるの?
Oracle 11g を使用しています。(残念ながら、今のところ 1 つは 11.1 で、もう 1 つは 11.2 です。)