64位 mysql short_MySQL-使用UUID_SHORT( ) 的问题

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位数字】

所以,原因是

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值