在 SQL 服务器 2012 中比较两个 nvarchar 列与 Unicode 文本

Compare two nvarchar columns with Unicode text in SQL server 2012

在 MS SQL Server 2012 中,我想比较数据类型为 nvarchar 且包含 Unicode 文本的两列。

以下查询 returns 什么都没有,甚至认为值不同。

DECLARE @TABLE TABLE(
    A nvarchar(100),
    B nvarchar(100)
);

INSERT INTO @TABLE VALUES (N'A²', N'A2')

SELECT *
FROM @TABLE 
WHERE A <> B;

我尝试使用二进制排序规则,它有效:

DECLARE @TABLE TABLE(
    A nvarchar(100),
    B nvarchar(100)
);

INSERT INTO @TABLE VALUES (N'A²', N'A2');

SELECT *
FROM @TABLE 
WHERE A COLLATE Latin1_General_BIN = B COLLATE Latin1_General_BIN;

是否有任何其他选项或者只能通过整理来完成?

Is there any other option or can this only be done with collation?

是的,例如HASHBYTES:

DECLARE @TABLE TABLE(A nvarchar(100),B nvarchar(100));
INSERT INTO @TABLE VALUES (N'A²', N'A2')

SELECT *
FROM @TABLE 
WHERE HASHBYTES('SHA2_256',A) <> HASHBYTES('SHA2_256',B);

LiveDemo

输出:

╔════╦════╗
║ A  ║ B  ║
╠════╬════╣
║ A² ║ A2 ║
╚════╩════╝

无论如何,整理解决方案是最干净的解决方案。

另一种选择是:

SELECT
  *
FROM
  @TABLE 
WHERE 
  CAST(A AS VARBINARY(MAX))<>CAST(B AS VARBINARY(MAX));

打印出 table

中的一行