SQL 服务器如何在同一 varchar 列中显示“€”和“¤”?

How can SQL Server display '€' and '¤' in the same varchar column?

我目前正在使用 SQL 服务器数据库(区域设置:German,排序规则: SQL_LATIN1_GENERAL_CP1_CI_AS)。

分析一个转换错误,我注意到一些包含'€'的条目和一些包含'¤'的条目显示在同一列中。

列定义为varchar(50)

示例结果集:

Column
-----------
2€
-----------
41¤

这种行为很奇怪,因为 varchar 字符编码是不包含“€”的 ISO 8859-1。 (Larnu 的回答:这个假设是错误的

显然,在 1999 年的大多数 ISO 8859-1 应用程序中,“¤”已被替换为“€”,或者大多数应用程序现在正在使用 ISO 8859-15。

如果“¤”被替换为“€”,两者如何显示在同一 varchar 列中?

我没有找到 SQL_LATIN1_GENERAL_CP1_CI_AS 的查找 table 或描述替换了哪个字符而不是“¤”的文章。

“这种行为很奇怪,因为 varchar 字符编码是 ISO 8859-1” 这是错误的。 varchar 使用与您正在使用的排序规则相关的代码页,并且排序规则 SQL_LATIN1_GENERAL_CP1_CI_AS 具有字符 ¤.

的映射

您可以使用 COLLATIONPROPERTY 函数获取排序规则的代码页。对于您问题中的代码页 1252:

SELECT [name],
       COLLATIONPROPERTY([name],'CodePage') AS CodePage,
       Description
FROM sys.fn_helpcollations()
WHERE [name] = N'SQL_LATIN1_GENERAL_CP1_CI_AS';

和快速 Google brought me to this page,它表明 '€''¤' 都在该代码页中,字节编码 80a4分别。