gpt4 book ai didi

mysql - 在 MySql 中将 MD5 转换为 2 个 Bigint 时超出范围值

转载 作者:行者123 更新时间:2023-11-29 01:42:37 26 4
gpt4 key购买 nike

在数据库 (MySql) 中,我正在存储一些字符串值并在存储它们之前检查这些字符串的唯一性。

为了快速比较字符串(我的意思是在记录之前检查传入的字符串是否已经存在于数据库中)我想获取传入的字符串(MD5),将字符串分成 2 个相等的部分,将它们转换为 2 个 bigints,存储它们与字符串分开,当记录请求到达时,我想在多列索引中搜索这两个 bigints。 (当然我会得到传入的字符串,MD5那个字符串,计算2个bigint部分然后查询数据库)

但是下面的“第 3 行”在我的“MySql 例程”中产生了一个有趣的错误。

...
declare mystring varchar(3000); -- line 1
declare md5bigint1value bigint; -- line 2
...

set md5bigint1value = conv(substring((md5(mystring)),1,16),16,10); -- line 3
...

在“第 3 行”,它说:错误代码:1264。第 1 行的“md5bigint1value”列值超出范围

有人知道为什么会这样吗?

如果您需要更多信息,请告诉我。非常感谢。

最佳答案

CONV ,当与正 to_base 一起使用时,转换为无符号值,而 BIGINT 是有符号的。无符号的 64 位值不一定适合有符号的 64 位变量。

If to_base is a negative number, N is regarded as a signed number. Otherwise, N is treated as unsigned.

您想要做的是使用-10 作为目标基地,即;

set md5bigint1value = conv(substring((md5(mystring)),1,16),16,-10); -- line 3

SQLfiddle to test with (10 无效,-10 有效)。

关于mysql - 在 MySql 中将 MD5 转换为 2 个 Bigint 时超出范围值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15955422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com