为什么 Oracle 转换函数将带重音符号的 "e" 转换为 "c"?

Why does Oracle convert function convert an accented "e" to a "c"?

在 Oracle 12.1 中,以下查询...

select convert(N'è','US7ASCII','EE8MSWIN1250') from dual;

Returns“c”。我希望得到一个“e”。

这是为什么?我对字符集问题不是很了解

我不知道为什么。但是,documentation

For complete correspondence in character conversion, it is essential that the destination character set contains a representation of all the characters defined in the source character set. Where a character does not exist in the destination character set, a replacement character appears

SQL> select convert(N'è','US7ASCII','EE8MSWIN1250') from dual;
                    ----  --------   ------------
C                   char  destination    source charset
-
c

显然,US7ASCII 不包含 EE8MSWIN1250 字符集中的所有字符;可以? 'è' 的替换字符(当涉及这两个字符集时)似乎是 c,所以这就是你得到的。

N'è' 在 UTF-16 中是 0x00E8,因此这些字节是您对 CONVERT 函数的原始输入。源字符集是 EE8MSWIN1250,因此 Oracle 假设您希望在该代码页中使用 0xE8。

the EE8MSWIN1250 codepage中,0xE8映射到č;如果将其转换为 ASCII,最接近的匹配项是“c”。

与您的其他示例类似 - ï = 0xEF,即 EE8MSWIN1250 中的 ď。

老实说,我很惊讶这些返回了任何东西 - 我尝试使用 CONVERT 进行的大量字符集转换根本不起作用。