使用 HASHBYTES (SHA1) 散列特定列导致该列比未散列的列具有更多不同的行

Hashing a specific column using HASHBYTES (SHA1) is causing that column to have more distinct rows than the unhashed column

简而言之,我有一个非常大的 database,其中包含数十万个条目和数百个不同的列。

为了保存 space,需要对其中一些列进行哈希处理。但是,当我尝试像这样对它们进行哈希处理时:

select distinct
columnA + hashbytes('sha1', [Column_in_question]) 
from [dbo].[Tabled_in_question]

我最终得到的行数比我这样做时多:

select distinct
columnA + [Column_in_question]
from [dbo].[Tabled_in_question]

我最好的猜测是 select distinct 不区分大小写,而 Hashbytes 是。但我真的不知道如何测试或修复它。

有什么想法吗?

你说得对,区别在于区分大小写

您可以使用

查看
select distinct
convert(VARBINARY(10), [Column_in_question]),
columnA + hashbytes('sha1', [Column_in_question]) 
from [dbo].[Tabled_in_question]

db 的排序规则很可能是 CI(不区分大小写),但是 hashbytes 使用.. 字节,正如您看到的将文本转换为 varbinary,它们是不同的

试试这个来改变整理和比较规则

select distinct
columnA + [Column_in_question] collate LATIN1_GENERAL_BIN
from [dbo].[Tabled_in_question]