首页 > 解决方案 > SELECT DISTINCT 返回意外的值

问题描述

我的 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 版本认为它们是相同的。

到底他妈发生了什么?

标签: sql-server

解决方案


VARCHAR 版本认为这两个字符不同

数据库的默认值CoLLATE (COLLATE SQL_Latin1_General_CP1_CI_AS)在这里起到了作用。

COLLATE SQL_Latin1_General_CP1_CI_AS考虑varchar价值'²''2'作为2个不同的价值。

在 NVARCHAR 的情况下, COLLATE SQL_Latin1_General_CP1_CI_AS将“²”和“2”视为相同的值。

它与 ACSII 或 UNICODE 无关


推荐阅读