带有二进制数据的MySQL MD5 LONGTEXT

时间:2015-02-18 19:01:23

标签: mysql

有没有办法获取存储在MySQL LONGTEXT字段中的二进制值的md5哈希值?

示例:

CREATE TABLE table_name (
  data_path VARCHAR(255) NOT NULL;
  data_column LONGTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci,
  PRIMARY KEY (path)
)

然后在应用程序代码(示例PHP)中:

function insert($path) {
  // ...
  $raw_file_data = file_get_contents($path);
  $stmt = $dbh->prepare(
    "INSERT INTO REGISTRY (data_path, data_column) VALUES (:path, :data)"
  );
  $stmt->bindParam('path', $path);
  $stmt->bindParam('data', $raw_file_data);
  $stmt->execute();
  // ...
}
insert('/path/to/binary_file.jpg');
insert('/path/to/text_file.text');

稍后,我们查询插入行的md5哈希:

SELECT md5(data_column) WHERE data_path = '/path/to/binary_file.jpg';
SELECT md5(data_column) WHERE data_path = '/path/to/text_file.txt';

但是来自MySQL的哈希值 not 非明文文件的实际文件的md5sum相匹配。

md5sum /path/to/binary_file.jpg  # does not match!
md5sum /path/to/text_file.txt    # matches!

据我所知,这与MySQL对列的字符集数据进行编码的方式有关。

我也理解这个字段应该是一个二进制字段(BLOBLONGBLOG等等)但这是在遗留系统中使用相同的表来存储二进制文件和文本文件,取决于能够搜索这些文本文件。

我的问题是:有没有办法获取data_column中存储的二进制值的md5哈希值?

0 个答案:

没有答案