我有一些代码,下面几行:
CAST(HASHBYTES('MD5', 'some long string with up to 256 characters') AS int)
CAST(HASHBYTES('SHA2_256', 'some very very long string...') AS int)
这样做是为了生成唯一的 int 值,稍后将 int 值用作查找键(或连接中的外键)。因此,我对为什么这样做的最佳猜测是使连接更快,能够生成索引(并且不会遇到那里的 900 字节限制)。
但我不确定上面的输出在将其转换为 int 时是否不会产生更多的冲突。
我的理解是,不可能将 MD5 哈希甚至 SHA-256 哈希表示为 int 值......
该代码最初是在 SQL-Server 2008 上开发的。我目前使用 SQL-Server 2014。
当然,它会产生更多的冲突。int
只有 4 个字节(32 位),而MD5
生成 20(160 位)和SHA2_256
32(256 位)。更少的位意味着更少的唯一值,因此更多的冲突。
从技术上讲,这是允许的...