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,它表明 '€'
和 '¤'
都在该代码页中,字节编码 80
和 a4
分别。
我目前正在使用 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,它表明 '€'
和 '¤'
都在该代码页中,字节编码 80
和 a4
分别。