根据这篇文章



他们说



我的问题是byte representation是什么?

以及为什么

SELECT BINARY_CHECKSUM('2Volvo Director 20'  )// -1356512636
SELECT BINARY_CHECKSUM('3Volvo Director 30'  )// -1356512636

给出相同的结果?

' 2 '的字节是而不是作为' 3 '的字节

最佳答案

我不知道该措辞的确切含义,但是通过谷歌搜索,我发现SQL Server MVP对整个算法(例如here)进行了反向工程,而其他人注意到该算法在16位左右存在奇怪的问题。字符周期。请注意,在该示例中,更改发生在位置1和位置17:

SELECT BINARY_CHECKSUM('2Volvo Director 20'  )-- -1356512636
SELECT BINARY_CHECKSUM('3Volvo Director 30'  )-- -1356512636
--                      12345678901234567

相隔16个-如果空间被删除,所以更改发生在位置1和 16 ,您将获得不同的校验和:
SELECT BINARY_CHECKSUM('2Volvo Director20'  )-- 1257395465
SELECT BINARY_CHECKSUM('3Volvo Director30'  )-- 1257395480
--                      12345678901234567

互联网上的共识似乎是BINARY_CHECKSUM提供的哈希函数质量低下,因此您应该优先使用HASHBYTES

关于sql-server - BINARY_CHECKSUM()中的字节表示形式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7515675/

10-09 09:10