我有用户表。主键是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
我收到此警告的原因是什么?我是否正确设置了数据类型?
答案 0 :(得分:3)
INT
是一个四字节有符号整数,而UUID_SHORT()
返回一个64位(即8字节)无符号整数。您正尝试将64位数据类型存储为4字节INT
,并且MySQL似乎将空字符串''
存储到字段user_id
中。
来自MySQL manual:
UUID_SHORT()
将“短”通用标识符作为64位无符号整数(而不是UUID()函数返回的字符串形式的128位标识符)返回。
您应该使用BIGINT UNSIGNED
类型。
答案 1 :(得分:1)
将无效,因为它会生成此类查询:
INSERT INTO `users` (`user_id`, `name`) VALUES ('', 'sami')
你可以替换''使用NULL,或从插入中删除user_id
INSERT INTO `users` (`name`) VALUES ('sami')
这将解决警告问题。