gpt4 book ai didi

sql - 如何处理 MySQL 函数 md5 的输入?

转载 作者:行者123 更新时间:2023-11-29 02:38:06 25 4
gpt4 key购买 nike

我无法理解 MySQL 4.1.22 中 md5 函数的输入是如何处理的。基本上我无法重新创建特定值组合的 md5sum 以进行比较。我猜这与输入数据的格式有关。

我已经建立了一个表,其中包含两列类型为 double (方向和高度)+ 第三列用于存储 md5 总和。

使用设置脚本,我将数据添加到方向和海拔字段 + 使用以下语法创建校验和:

insert into polygons (
direction,
elevation,
md5sum
)
values (
(select radians(20.0)),
(select radians(30.0)),
( md5( (select radians(20.0)) + (select radians(20.0)) ) )
)

最终为:0.349065850398866, 0.523598775598299, '0c2cd2c2a9fe40305c4e3bd991812df5'

稍后我将存储的 md5sum 与新计算的进行比较,新计算的是使用 md5('0.349065850398866' + '0.523598775598299') 创建的,我得到以下校验和:'8c958bcf912664d6d27c50f1034bdf34'

如果我将传递的“字符串”中的最后一个小数点从 9 修改为 8 0.523598775598298,我会得到与之前存储的相同的校验和,'0c2cd2c2a9fe40305c4e3bd991812df5'。从 8 到 0 的最后一位小数的任何值都给出相同的校验和。

在设置脚本中使用 BINARY, (md5( (select BINARY(radians(20.0))) + (select BINARY(radians(20.0))) ) 创建与我的原始校验和相同的校验和“运行时计算”

值得一提的是,原始方法适用于我拥有的所有其他行 (55)

我想我正在以一种有点奇怪的方式使用该函数,但我不确定是否有更好的方法,所以为了找到更好的方法,我觉得我需要了解电流失败的原因。

最佳答案

您添加的两个数字以二进制形式存储,但以十进制形式显示。如果您将小数形式返回给机器,则不能保证您会得到完全相同的数字。

在这种情况下,这会导致加法给出略微不同的结果,从而给出完全不同的 MD5 和:

mysql> select radians(20.0) + radians(30.0), '0.349065850398866' + '0.523598775598299';
+-------------------------------+-------------------------------------------+
| radians(20.0) + radians(30.0) | '0.349065850398866' + '0.523598775598299' |
+-------------------------------+-------------------------------------------+
| 0.87266462599716 | 0.87266462599717 |
+-------------------------------+-------------------------------------------+
1 row in set (0.00 sec)

如果你想始终如一地得到相同的结果,你需要将 radians(20.0)radians(30.0) 的结果存储在某个地方的变量中,永远不要依赖他们的打印品。

关于sql - 如何处理 MySQL 函数 md5 的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1626226/

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