【 TiDB 使用环境】生产环境 、测试环境
【 TiDB 版本】v 5.1.0
【遇到的问题:问题现象及影响】生产建表语句使用AUTO_RANDOM(id
bigint(20) unsigned NOT NULL AUTO_RANDOM COMMENT ‘自增ID’ ),产生的id 20位,会超出长整型(8字节)的范围,长整型最大只能接受9223372036854775807这么大。),比如只生成15~18位id等?
【 TiDB 使用环境】生产环境 、测试环境
【 TiDB 版本】v 5.1.0
【遇到的问题:问题现象及影响】生产建表语句使用AUTO_RANDOM(id
bigint(20) unsigned NOT NULL AUTO_RANDOM COMMENT ‘自增ID’ ),产生的id 20位,会超出长整型(8字节)的范围,长整型最大只能接受9223372036854775807这么大。),比如只生成15~18位id等?
应该是用了 unsign,因此取值范围到了 2^64(20位数字),如果想要减少一位,可以试试在 Auto_random 后面加(5,63),这个功能 6.3 之后开始支持,可以截断 auto_random 的取值范围。
5.1 没看到这个文档,可能不支持
应该是,我在5.4.3上测试,不支持这种AUTO_RANDOM(3,36)写法,但是6.5是支持的。。。
我们改为bigint(1)和bigint(20)测试都是19位,后期id会不会用爆满,感觉不会,这么多值都是随机的,不是递增的。
所以如果你只要 18 位的数字,Auto_random 后面加(5,59)的方案可行么?
这个的含义是,64-59=5 前五位都是 0 用于限制 id 范围,之后的 5 位是按时间打散的 random 值, 最后的 59-5=54 位用于自增。