【发布时间】:2014-10-15 19:15:14
【问题描述】:
我有几个 NLS 字符编码不同的数据库。一种使用AL32UTF8 (UTF-8),另一种使用WE8MSWIN1252 (Windows 1252)。是的,这很糟糕,我会推动把事情理顺,这样它们就一样了。同时,我需要编写一些包含非 ASCII 字符的 SQL。例如,我需要使用 á,即 Unicode 中的 U+00E1。在 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。)
【问题讨论】:
标签: oracle utf-8 character-encoding windows-1252