有没有办法获取存储在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对列的字符集数据进行编码的方式有关。
我也理解这个字段应该是一个二进制字段(BLOB
,LONGBLOG
等等)但这是在遗留系统中使用相同的表来存储二进制文件和文本文件,取决于能够搜索这些文本文件。
我的问题是:有没有办法获取data_column
中存储的二进制值的md5哈希值?