问题说明

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

所以,原因是在MySQL设置的时候没有勾选无符号**这个选项导致的,勾选上就解决了。╮(╯▽╰)╭ 就是这么的简单的地方。

临时解决方式,使用时间错手动生成了一个19位以内的随机id:

FLOOR(REPLACE(unix_timestamp(current_timestamp(3)),'.',''))*10000+FLOOR(RAND()*10000)

认真查了一些详细的资料

官方资料

版本:MySQL 5.7

UUID_SHORT()

将“ 短 ”通用标识符作为64位无符号整数返回。返回的值 UUID_SHORT()与UUID()函数返回的字符串格式128位标识符 不同,并且具有不同的唯一性属性。UUID_SHORT()如果满足以下条件,则保证值 是唯一的:

在server_id当前服务器的值介于0和255之间,您的设置主从服务器中是唯一的

您不会在mysqld restarts 之间设置服务器主机的系统时间

UUID_SHORT()在mysqld重启 之间, 你平均每秒调用的次数少于1600万次

该UUID_SHORT()返回值的构造是这样的:

(server_id & 255) << 56

+ (server_startup_time_in_seconds << 24)

+ incremented_variable++;

mysql> SELECT UUID_SHORT();

-> 92395783831158784

UUID_SHORT() 不适用于基于语句的复制。

按照以上官方的说法,UUID_SHORT返回的值为64位无符号整数,也就是unsigned long long类型。而且,由于使用到了时间搓,这个的初始值会很大(通常都会到17位数字)。

但是,这并不保证其不会返回18,19,20位的数据,只能保证在2^64-1以内(最大达到20位数字);

目前没有查到说可以调整或初始设置UUID_SHORT() 的配置

2019-04-04 小杭 ミ(・・)ミ

补充BUG-Java数据接收错误

在数据库使用了无符号bigint类型之后,使用UUID_SHORT()进行生产id的时候,数据库是可以插入,没有问题的。

但是,由于使用的是JAVA的Long类型进行数据接收,这里有可能是会超出长度的。【数据为无符号long类型这里差了1位】

因为,JAVA本身的基本类型是不支持无符号类型的,所以这里的转换会有问题。

而且,由于是已经遇到了,上面开始的那个BUG,这里是肯定是会超出的。【UUID_SHORT的值是在mysql启动的时候自动配置的,所以相当的无奈╮(╯_╰)╭】

所以这里,特别说明记录一下,这个问题。

解决办法:目前还是使用 【自定义的ID生成】,或者 上面 的临时解决方式【时间戳拼接】

其实最好的还是使用32位的UUID比较的好

2019-04-16 小杭 ε=(´ο`*)))唉

java short uuid_MySQL-使用UUID_SHORT( ) 的问题相关推荐

  1. YDOOK: Java short 数据类型

    YDOOK: Java short 数据类型 © YDOOK JY Lin 文章目录 YDOOK: Java short 数据类型 © YDOOK JY Lin `short` 1. Java 的 s ...

  2. java short long_谈谈Java中整数类型(short int long)的存储方式

    在java中的整数类型有四种,分别是 byte  short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1. 基本类型:short 二进制位数:16 ...

  3. java short字段_Java Field setShort()用法及代码示例

    java.lang.reflect.Field的setShort()方法用于将字段的值设置为指定对象的缩写.当您需要将对象的字段值设置为短时,可以使用此方法在对象上设置值. 用法: public vo ...

  4. java short 写法_Java Short longValue()用法及代码示例

    Short类的java.lang.Short.longValue()方法是Java中的内置方法,用于将Short对象的值返回为long. 用法 ShortObject.longValue() 返回值: ...

  5. java short 后缀_自学java的新手问个问题,为什么写个代码中的int能自动转

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 你学一个东西 先学会他的定义 java语法是这样定义的 类型修饰符 变量名 = 值 其中左边是被赋值的 右边是赋值的 类型修饰符有 八种 int bool ...

  6. java short float_Java Short floatValue()用法及代码示例

    Short类的java.lang.Short.floatValue()方法是Java中的内置方法,用于将Short对象的值作为浮点数返回. 用法: public float floatValue() ...

  7. Java short 无符号右移_char类型byte类型或short类型进行无符号右移遇到的神奇问题...

    代码 package com.ggp.test.Third; /** * @Author:ggp * @Date:2019/7/27 17 23 * @Description: */ public c ...

  8. java short后缀_自学java的新手问个问题,为什么写个代码中的int能自动转

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 你学一个东西 先学会他的定义 java语法是这样定义的 类型修饰符 变量名 = 值 其中左边是被赋值的 右边是赋值的 类型修饰符有 八种 int bool ...

  9. Java Short类hashCode()方法及示例

    短类hashCode()方法 (Short class hashCode() method) hashCode() method is available in java.lang package. ...

最新文章

  1. 多个数字数组_三菱ST语言教学(2)——数组的使用
  2. linux shell expr命令 字符串操作
  3. 华为畅享z可以升级鸿蒙系统吗,华为鸿蒙系统手机升级型号 如何抢先体验
  4. 自己使用window.open和window.showModalDialog在父子窗口传值的实践简单总结
  5. 老子《道德经》第三十三章
  6. C++标准库与Java基础类对照表
  7. Android 使用ViewPager实现导航页面
  8. 良心推荐:高品质音乐播放器Audirvana for Mac
  9. 安卓手机老是自动保存图片_Redmi K30 Pro自动亮度调节和iPhone基本一致,安卓手机的大进步...
  10. 电脑同时安装python2和3_电脑上同时安装Python2和Python3
  11. static analysis tool
  12. 【电路补习笔记】7、磁珠的工作原理、磁珠的分类、磁珠的模型、磁珠的参数、磁珠与电感的区别、磁珠的应用、磁珠的误区
  13. 97年大学计算机考试是 级,1997年9月全国计算机等级考试一级笔试试卷 DOS
  14. LeetCode0704-二分查找
  15. 【英语四六级-必背单词】高中英语单词 (E)-MP3试听与下载
  16. 服务器排性能行榜,服务器CPU性能排行榜天梯图(双路/三路/四路)
  17. 可以通过培训“速成速转”
  18. 手机号码验证归属地 接口整理
  19. Python 29 描述符
  20. 清北计算机导论,北京科技大学强军计划考研盛世清北北科强军计划考研经验分享.docx...

热门文章

  1. Python学习入门基础教程(learning Python)--4.3 Python的for嵌套
  2. php++数据库备份,php实现数据库备份
  3. deepin/Ubuntu搭建FTP/SFTP
  4. java线程中Exchanger使用
  5. 一次外网打不开网站的故障总结
  6. System Center 2012 SP1系列之SCVMM篇-(1)VMM2012安装
  7. 更改收藏夹路径和桌面路径
  8. wooden sticks
  9. C语言学习笔记--数组参数和指针参数
  10. Ubuntu 14.04 下每次重启系统都默认最大亮度的解决办法