插入主键的UUID_SHORT时重复输入mysql

时间:2013-08-21 14:32:31

标签: mysql uuid

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

2 个答案:

答案 0 :(得分:0)

您需要使用BIGINT。 INT(18)仍为32位,不能保存18个十进制数字。

关于UUID_SHORT的唯一性,您应该检查manual

答案 1 :(得分:0)

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

那应该解决您的问题:)