区分T-SQL中的指数

区分T-SQL中的指数,sql,sql-server,unicode,Sql,Sql Server,Unicode,在SQL Server 2017中(14.0.2) 考虑下表: CREATE TABLE expTest ( someNumbers [NVARCHAR](10) NULL ) 假设您用一些值填充表格: INSERT INTO expTest VALUES('²', '2') 为什么下面的SELECT同时返回两行 SELECT * FROM expTest WHERE someNumbers = '2' nvarchar不应该意识到“²”是unicode,而“2”是一个单独的值

在SQL Server 2017中(14.0.2)

考虑下表:

CREATE TABLE expTest
(
    someNumbers [NVARCHAR](10) NULL
)
假设您用一些值填充表格:

INSERT INTO expTest VALUES('²', '2')
为什么下面的SELECT同时返回两行

SELECT * 
FROM expTest 
WHERE someNumbers = '2'
nvarchar
不应该意识到“²”是unicode,而“2”是一个单独的值吗?如何(不使用UNICODE()函数)将此数据标识为不等价

是一把小提琴。这表明:

  • 即使这些值作为国家字符集常量输入,您的观察结果也是正确的
  • 字符的“ASCII”版本实际上是不同的
  • 通过区分大小写的排序,问题就解决了
我认为指数只是被视为数字的一个不同的“大小写”,因此在不区分大小写的排序规则中它们被认为是相同的


比较与区分大小写的排序规则相同。

您的排序规则设置是什么?例如,您没有使用UNICODE字符串,但问题来自您使用的排序规则。您的insert语句中似乎有语法错误@christopher@DaleBurrellSQL拉丁语通用CP1 CI AS