使用 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]
简而言之,我有一个非常大的 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]