mysql - 将二进制 SHA1 哈希存储到 mySQL BINARY(20) 列中

标签 mysql insert binary

我想将 SHA1 哈希存储到 BINARY(20) 列中。我尝试通过准备 INSERT INTO foo SET ( hash=? ) 然后执行绑定(bind)到包含 20 字节二进制值的变量的语句,但出现运行时语法错误“... hash= '\0\0#*$^!...'”。 (我很困惑为什么执行准备好的语句会表示这样的值。)This post不表示将 SHA1 存储到 BINARY(20) 列有任何问题,但不表示它是如何用 SQL 完成的。

更新:“为什么是二进制而不是十六进制?”将有大约 10 亿行,因此 20 个额外字节很重要,而且我还被告知数字查找的速度是字符串查找的两倍(并且 BINARY 字段将被视为数字)

更新 2:错误消息不是提示二进制值的表示,而是提示 SET 列表周围的括号。

最佳答案

使用 UNHEX在插入之前翻译它的功能:

 INSERT INTO foo SET hash=UNHEX('0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33');

您将解决空间需求,但在将哈希从二进制转换为十六进制再转换回二进制时,您可能会遇到一些性能问题。

关于mysql - 将二进制 SHA1 哈希存储到 mySQL BINARY(20) 列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14608413/

相关文章:

mysql - 简单的 MySQL 问题 : query with a null value

MySQL 的 INSERT IGNORE INTO & 外键

c++ - 读取二进制文件到整数数组

c - 读取二进制文件,无法执行二进制文件: Exec format error

php - 使用空白字段条目更新,MySql 将其显示为零

php - mysql插入js创建的textareas数组

mysql - 如何将这些表规范化为 3NF

php - 无法插入数据

c# - 如何为列表中的每个项目添加新对象

python - 如何在python中修改文件的二进制状态?