【问题标题】:md5 of MySQL resultMySQL结果的md5
【发布时间】:2016-05-12 07:39:01
【问题描述】:

我想在不使用 php 的情况下获取 mysql 结果的 md5 哈希值。有可能吗?

此查询导致错误:

SELECT md5(*) FROM bookings WHERE dep_id = 1;

因为 md5 需要字符串作为参数 - 如何将整个结果发送到 md5 函数?

[编辑] 我不能硬编码查询中的每个列名,因为 - 除了它们的名称/数量经常更改之外,大约有 100 列。

【问题讨论】:

  • 将每一列连接成一个字符串并对其进行哈希处理。
  • 但是如果列数未知怎么办?
  • 在 SQL 中,列数(及其名称)始终是已知的。如果未知,则说明您使用 SQL 错误(不,SQL 不是大文本文件)。

标签: mysql md5


【解决方案1】:

您需要使用CONCAT 函数连接所有字段:

SELECT md5(CONCAT(field1,field2,field3 ...)) FROM bookings WHERE dep_id = 1;

【讨论】:

  • 但是如果列数未知怎么办?还是大约有 100 列?
  • 根据定义,SQL DB 中的列数是已知的。如果有 100 列,会发生什么变化?只有查询的长度。
  • 好问题是:以下表达式的结果是否相等:MD5(CONCAT('a',NULL,'b'))MD5(CONCAT('a','','b'))。那么这些呢:MD5(CONCAT('12','34'))MD5(CONCAT('1','234'))
  • 问题是我无法在每次弹出新列时更改此查询 - 我需要动态查询 - 否则我将不得不使用 PHP。
  • 然后在 PHP 中进行。这会容易得多。无论如何,作为 N.B.在您的问题下的评论中提到,您似乎在设计应用程序时犯了一些错误,并且您以错误的方式使用 RDBMS。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
相关资源
最近更新 更多