我有一些代码包含以下几行:
a)cast(hashbytes(' MD5','一些长字符串,最多256个字符')作为int)
b)施放(hashbytes(' SHA2_256','一些非常长的字符串...')作为int)
这样做是为了生成一个唯一的int值,后来int值被用作查找键(或连接中的外键)。所以我最好的猜测为什么它这样做是为了使连接更快,能够生成一个索引(而不是在那里遇到900字节的限制)。
但我不确定上面的输出在将其转换为int时是否会产生更多的冲突。
我的理解是,不可能将MD5哈希值甚至sha-256哈希值表示为int值...
该代码最初是在SQL-Server 2008上开发的。我目前使用的是SQL-Server 2014
答案 0 :(得分:1)
当然它将产生更多的碰撞。 int
仅4个字节(32位),而MD5
生成20(160位)和SHA2_256
32(256位)。更少的比特意味着更少的唯一值,因此更多的冲突。
技术上允许 ...
答案 1 :(得分:-1)
Hashbytes提供了varbinary类型的输出,它本身不能转换为int。因此可能这不会有用。你可以使用varbinary输出本身作为连接的关键,因为它会给你相同的结果