0

我得到了到目前为止我不明白的内容,我收到了一条重复的条目错误消息,我正在尝试为我的主索引插入一个 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() :(

4

2 回答 2

0

你需要使用BIGINT. INT(18) 仍然是 32 位,不能容纳 18 位十进制数字。

至于 UUID_SHORT 的唯一性,您应该查看手册

于 2013-08-21T14:35:47.173 回答
0

正如@Vatev 所说,使用 bigint 然后作为安全网使用ON DUPLICATE .... KEY UPDATE

那应该可以解决您的问题:)

于 2019-12-09T17:23:41.250 回答