允许将hashbytes输出转换为整数?

时间:2016-02-22 14:02:09

标签: tsql sql-server-2012 sql-server-2014

我有一些代码包含以下几行:

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

2 个答案:

答案 0 :(得分:1)

当然它将产生更多的碰撞。 int仅4个字节(32位),而MD5生成20(160位)和SHA2_256 32(256位)。更少的比特意味着更少的唯一值,因此更多的冲突。

技术上允许 ...

答案 1 :(得分:-1)

Hashbytes提供了varbinary类型的输出,它本身不能转换为int。因此可能这不会有用。你可以使用varbinary输出本身作为连接的关键,因为它会给你相同的结果