我想将 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/