在数据库(MySql)中,我存储一些字符串值,并在存储它们之前检查这些字符串的唯一性。
为了快速进行字符串比较(我的意思是在记录之前检查传入的字符串是否已存在于数据库中),我想对传入的字符串(MD5)进行处理,将字符串分成2个相等的部分,将它们转换为2个bigint,将它们单独存储使用字符串,当记录请求到达时,我想在多列索引中搜索这 2 个 bigint。(当然我会获取传入的字符串,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
...
Run Code Online (Sandbox Code Playgroud)
在“第 3 行”,它显示:错误代码:1264。第 1 行的“md5bigint1value”列的值超出范围
有谁知道为什么会发生这种情况?
如果您需要更多信息,请告诉我。非常感谢。
CONV与正 to_base 一起使用时,会转换为无符号值,而BIGINT有符号值。无符号 64 位值不一定适合有符号 64 位变量。
如果 to_base 是负数,则 N 被视为有符号数。否则,N 被视为无符号。
您想要做的是用于-10目的地基地,即;
set md5bigint1value = conv(substring((md5(mystring)),1,16),16,-10); -- line 3
Run Code Online (Sandbox Code Playgroud)
用于测试的 SQLfiddle(10 不起作用,-10 可以)。