为了获得较长文本的内容派生密钥,我计算了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
不保证任何数据类型和二进制数据类型之间的转换在 SQL Server 版本之间是相同的。
好吧,这不完全是一种转换。尽管如此,这种不确定性是否也适用于binary
从较长版本的binary
? 对于 SQL Server 的未来版本,我应该期待什么?