我的SQL Server 2016数据库使用归类SQL_Latin1_General_CP1_CI_AS。当我运行此查询时...
select distinct x from (
select '²' as x
union all
select '2'
) y
select distinct x from (
select N'²' as x
union all
select N'2'
) y
VARCHAR版本将两个字符视为不同; NVARCHAR版本将它们视为相同。
到底发生了什么?
答案 0 :(得分:1)
显然,它们被视为与nvarchar相同的字符的大写和小写版本。如果您运行此区分大小写的查询:
select Distinct x from (
select N'2' COLLATE SQL_Latin1_General_CP1_CS_AS as x
UNION ALL
select N'²' COLLATE SQL_Latin1_General_CP1_CS_AS as x
) y
您将获得以下输出:
x
2
²
答案 1 :(得分:1)
VARCHAR版本将两个字符视为不同
默认的数据库dplyr::lag
CoLLATE
在这里起作用。
(COLLATE SQL_Latin1_General_CP1_CI_AS)
将COLLATE SQL_Latin1_General_CP1_CI_AS
的值varchar
和'²'
视为两个不同的值。
对于NVARCHAR '2'
,将'²'和'2'视为相同的值。
与ACSII或UNICODE无关