我目前有一个包含3列的表,ID(主要ai),密钥(唯一二进制(32)),值(字符串),就是这样。 Key只是值的sha256二进制值。
我正在通过执行大量准备好的批量插入语句来测试我的数据库,每个语句随机都有1-200个值。我正在更新Value的原因是incase值以某种方式超时改变了,我总是希望Value匹配Key hash
INSERT INTO kv (key, value) VALUES (UNHEX(?), ?) ON DUPLICATE KEY UPDATE id=id, value = VALUES(value)
我的问题是在我查看我的数据库后插入一堆随机数据后,我的一些值被覆盖了,我不知道为什么。 sha256(“100”)的键可以随机赋值为“123”。只有少量我的数据不正确,但其中任何一个都不正确的事实很麻烦。
我为所有sql语句启用了mysqld日志记录,所有插入语句都显示Key:sha256(“100”)值:“100”被插入,永远不会出现“123”或任何不正确的数据出现在日志中,但在数据库中,这将是不正确的值。
我的问题是我的数据与我的陈述不符?
我已经尝试清空我的数据库并逐个单独地重新运行所有语句,并且我的所有数据都保持正确。
我不确定应该怎样或者如何寻找问题所在,我尝试了MariaDB 10.0.26和10.1.14,两次都遇到了这个问题。
(从评论中添加)
CREATE TABLE IF NOT EXISTS ip_raw (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
tokenhash binary(32) NOT NULL,
tokenvalue varchar(45) COLLATE utf8mb4_bin NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY token (tokenhash)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=1 ;