到目前为止我还不明白,我收到了重复条目错误消息,我正在尝试为主索引插入 UUID_SHORT。
id 列是整数 18,UUID_SHORT 是使用 BEFORE_INSERT 触发器生成的:
CREATE TRIGGER `TR_Documents_BI` BEFORE INSERT ON `documents`
FOR EACH ROW SET NEW.id = UUID_SHORT()
错误是
Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2147483647' for key 'PRIMARY'
我在 stackoverflow 上读到,我应该尝试使用 BigInt 存储数据,但结果并不那么令人信服,因为生成的第一个 UUID_SHORT 给出的结果是:
95161384827879440
下一个类似自动增量的是
95161384827879440 + 1
我不明白为什么我不能将 UUID_SHORT 作为我的主索引。
但是,如果我生成 UUID(),问题就不存在;
有人可以帮忙吗?
编辑: 不可能将 UUID_SHORT 存储为整数,明白了!但是当我使用 BigInt(18) 时,我生成了以下条目: 95161384827879440, 95161384827879441, 95161384827879442, 95161384827879443, 95161384827879444
出现以下错误消息:
Warning: #1366 Incorrect integer value: '' for column 'id' at row 1
所以它仍然不是存储在我的列中的生成的 UUID_SHORT() :(
最佳答案
您需要使用BIGINT
。 INT(18) 仍然是 32 位,不能容纳 18 位十进制数字。
至于 UUID_SHORT 的唯一性,您应该检查 manual .
关于mysql - 插入主键 UUID_SHORT 时出现重复条目 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18360297/