我有几个 NLS 字符编码不同的数据库。一种使用AL32UTF8
(UTF-8),另一种使用WE8MSWIN1252
(Windows 1252)。是的,这很糟糕,我会推动把事情理顺,这样它们就一样了。同时,我需要编写一些包含非 ASCII 字符的 SQL。例如,我需要使用 á,它是U+00E1
Unicode。在 UTF-8 中,它用十六进制值表示0xC3A1
,而在 Windows 1252 中,它用十六进制值表示0x00E1
。(换句话说,这些是字节值。)
所以这给了我想要的 UTF-8 数据库:
SELECT CHR(TO_NUMBER('C3A1', 'xxxx')) FROM DUAL;
这给了我我想要的 Windows 1252 数据库:
SELECT CHR(TO_NUMBER('00E1', 'xxxx')) FROM DUAL;
不过,我似乎无法找到一种方法让 Oracle 只接受一个并将其转换为正确的编码。我真的不在乎我最终使用哪种表示。我只想使用一个十六进制值,因为需要在两个数据库上运行相同的脚本。我怎样才能做到这一点?
使用 Oracle 11g。(不幸的是,一个是 11.1,另一个是 11.2。)