根据这篇文章
他们说
我的问题是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/