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

标签 sql mysql md5

我无法理解 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/

相关文章:

sql - 什么时候应该在 SQL Server 中对日志文件使用自动收缩?

c# - 我应该如何处理来自不同来源的仓储数据?

如果表 1 中的*所有*行不存在,则 MySQL 查询从表 2 中选择行

encoding - Blackberry 编码 MD5 与 C# 中的 MD5 不同

ssl - Amazon S3 数据完整性 MD5 与 SSL/TLS

java - 在 Java 中获取文件的 MD5 校验和

用于选择我的第一列中常见的记录的 SQL 查询

mysql - mysql上的select查询根据条件从单个表中选择值

mysql - 在没有自动增量列的情况下检索插入到 mysql 表中的最后 10 行?

php - 有没有办法从 MySQL 数据库动态检索数据到 Android 微调器?