0

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

其中一些列需要进行散列以节省空间等。但是当我尝试像这样对它们进行散列时:

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 是。但我真的不知道如何测试或修复它。

有任何想法吗?

4

1 回答 1

0

你是对的,区别在于区分大小写

你可以检查它使用

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]
于 2017-01-11T10:46:05.323 回答