0

为了获得较长文本的内容派生密钥,我计算了HASHBYTES('SHA1', text). 它返回 20 个字节长varbinary。由于我知道结果的长度,我将其存储为binary(20).

为了使其更短(用作键),我想遵循 Git 的短散列思想——就像十六进制表示的第一个(或最后一个)字符一样。而不是字符,我想binary(5)binary(20).

尝试使用 SQL Server 2016 时,似乎采用以下简单方法:

DECLARE @hash binary(20) = HASHBYTES('SHA1', N'příšerně žluťoučký kůň úpěl ďábelské ódy')
DECLARE @short binary(5) = @hash

SELECT @hash, @short

返回前导字节(高位字节):

(No column name)                            (No column name)
0xE02C3C55FBA0DF13ADA1B626B1E31746D57B4602  0xE02C3C55FB

但是,文档(https://docs.microsoft.com/en-us/sql/t-sql/data-types/binary-and-varbinary-transact-sql?view=sql-server-ver15)警告说:

不保证任何数据类型和二进制数据类型之间的转换在 SQL Server 版本之间是相同的。

好吧,这不完全是一种转换。尽管如此,这种不确定性是否也适用于binary从较长版本的binary? 对于 SQL Server 的未来版本,我应该期待什么?

4

0 回答 0