gpt4 book ai didi

sql-server - 为什么 checksum() 对于不同的字符串返回相同的值

转载 作者:行者123 更新时间:2023-12-02 16:50:30 24 4
gpt4 key购买 nike

以下 SQL 及其结果显示不同的字符串得到相同的 checksum 结果。为什么?

select  str ,
binary_checksum(str) binary_checksum,
checksum(str) checksum,
hashbytes('md5', str) md5
from ( values ( '2Volvo Director 20'), ( '3Volvo Director 30'), ( '4Volvo Director 40') )
t ( str )
str                binary_checksum checksum    md5------------------ --------------- ----------- --------------------------------------------2Volvo Director 20 -1356512636     -383039272  0xB9BD78BCF70FAC36AF14FFF5897672783Volvo Director 30 -1356512636     -383039272  0xF039462F3D15B162FFCDB6125D2908264Volvo Director 40 -1356512636     -383039272  0xFAF315CDA6E453CCC09838CFB129EE74

最佳答案

SQL CHECKSUM() 和 MD5 为 Hash functions 。散列是一种单向算法,可以采用任意数量的字符/字节并返回固定数量的字符/字节。

这意味着无论您输入的是 1 个字符还是一本完整的书( war 与和平),您都会得到相同长度的响应。因此输入是无限数量的组合,而输出是有限的。基于此,不同值获得相同的哈希值是不可避免的。它被称为Hash collision 。好的哈希算法会尝试减轻这种情况,从而很难找到这些冲突的值。

关于哈希的理论已经足够了。这正是您问题的答案。 issue with CHECKSUM()是什么? ?

关于sql-server - 为什么 checksum() 对于不同的字符串返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41946650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com