问题描述
为了获取较长文本的内容派生密钥,我确实计算了 HASHBYTES('SHA1',text)
。它返回 20 个字节长的 varbinary
。由于我知道结果的长度,因此我将其存储为 binary(20)
。
为了使它更短(用作键),我想遵循 short hash 的 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 的未来版本,我应该期待什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)