MySQL UUID_SHORT数据类型

时间:2015-05-12 04:06:34

标签: mysql

我有用户表。主键是user_id,其数据类型为bigint(20)

我通过下面的触发器使用user_id生成UUID_SHORT()。问题是当我尝试按如下方式插入记录时收到警告:

Warning: #1366 Incorrect integer value: '' for column 'user_id' at row 1

我的phpMyAdmin触发器如下:

BEGIN
SET NEW.user_id=UUID_SHORT();
END

我收到此警告的原因是什么?我是否正确设置了数据类型?

2 个答案:

答案 0 :(得分:3)

INT是一个四字节有符号整数,而UUID_SHORT()返回一个64位(即8字节)无符号整数。您正尝试将64位数据类型存储为4字节INT,并且MySQL似乎将空字符串''存储到字段user_id中。

来自MySQL manual

  

UUID_SHORT()

     

将“短”通用标识符作为64位无符号整数(而不是UUID()函数返回的字符串形式的128位标识符)返回。

您应该使用BIGINT UNSIGNED类型。

答案 1 :(得分:1)

如果您尝试从PMA插入,

将无效,因为它会生成此类查询:

INSERT INTO `users` (`user_id`, `name`) VALUES ('', 'sami')

你可以替换''使用NULL,或从插入中删除user_id

INSERT INTO `users` (`name`) VALUES ('sami')

这将解决警告问题。