MySQL-使用UUID_SHORT( ) 的问题
文章目录
MySQL-使用UUID_SHORT( ) 的问题
问题说明
简单分析解决
分析
解决
认真查了一些详细的资料
官方资料
补充BUG--Java数据接收错误
问题说明
表app_msg的主键id 设置的类型为:bigint 20
使用插入语句:INSERT INTOapp_msg(id,...) VALUES (UUID_SHORT(),...)
然而系统报错:[Err] 1264 - Out of range value for column 'id' at row 1
在测试环境使用时没有问题,但是在准生产数据库使用时报错了
简单分析解决
分析
在两个数据库查看UUID_SHORT()生成的情况:
select UUID_SHORT()
--结果1:26047177025388691 这里生成了17位的UUID_SHORT
--结果2:18040425909390934036 这里生成了20位的UUID_SHORT
结果1为17位没问题,结果2位20位导致报错的时候超过最大值
解决
这里可以知道原因是在字段类型上面,bigint 20 对应的类型是 long long 类型 【长度为:(-2^63 ~ 2^63-1) 10^18 19位数字】;
而UUID_SHORT() 返回的是 unsigned long long 类型【长度为:(0 ~ 2^64-1) 10^19 20位数字】
所以,原因是