背景:接手了别人的代码,id 用的 varchar 但是内容是拼接出来的时间戳,都是长整型。
蓝后,写个 select 语句,偷懒,一直懒得加单引号 突然发现一个 select 出来了 6 条,卧槽,大问题,id 生成策略会重复。 面对重型生产问题,一步步查,怎么都觉得不会重复,一看,卧槽,这六条 id 不一致啊。 …… 当当当当~ select 661843814642404550000000 = '661843814642404556823288' 得到 1 突然惊醒 mysql 数据转换有问题,一查文档,果然,丢精度。所以,偷懒没好处……位引以为戒。
1 tedderchan 2020-01-02 20:02:41 +08:00 第一次听说有人 id 用 varchar, 我我也是醉了 |
![]() | 2 KasuganoSoras 2020-01-02 20:11:41 +08:00 第一次听说有人 id 用 varchar |
3 walpurgis 2020-01-02 20:28:34 +08:00 via Android 看见弱类型语言出现大数字要警惕,上次碰到前端 js 接收的 JSON 里有个 20 位数字,末尾都是 0,同样的问题 |
![]() | 4 CStarter 2020-01-02 20:39:38 +08:00 via Android @tedderchan id 用 uuid,就是 varchar 啊 |
5 sx90 2020-01-02 21:59:47 +08:00 id,不是表格内部自增号吗 |
![]() | 6 opengps 2020-01-02 22:30:20 +08:00 id 用 varchar 不是问题,uuid 就用 varchar 存储。不正常的是类型不严格 |
7 luozic 2020-01-03 03:06:25 +08:00 via iPhone 丢精度这是 feature ?;类型系统这个东西有一本非常厚的书,一般用的语言类型系统都是半生不熟,sql 这东西设计里面就没有非常严格的类型系统玩。 |
![]() | 8 msg7086 2020-01-03 04:13:43 +08:00 |
![]() | 9 guanhui07 2020-01-03 07:19:54 +08:00 第一次听说有人 id 用 varchar |
![]() | 10 opengps 2020-01-03 08:30:18 +08:00 via Android 我要是在本帖回一句,我最自豪的数据库设计是无主键,是不是会被鄙视 |
![]() | 11 ZredoC 2020-01-03 08:51:47 +08:00 图怎么莫得了 |
![]() | 13 opengps 2020-01-03 09:22:58 +08:00 ![]() @ytll21 之前分享过连接,主要核心就一个:匹配业务。 用于传感器采集类业务的巨型表设计(关系型数据库版): https://www.opengps.cn/Blog/View.aspx?id=284&from=v2ex |
![]() | 14 lskjdfgl 2020-01-03 10:32:34 +08:00 抓紧看了下我的数据库设计,现在改也不知道来不来的及 |
![]() | 15 qq1054000800 2020-01-03 19:04:54 +08:00 innode 引擎,用 uuid 做主键是非常糟糕的设计 |
![]() | 16 yqmac OP 说实话,系统我是个接盘侠,主键 uuid 或者这种长整型的 varchar 也是恨不能理解的……但是这个玩意已经无法更改了啊,前人挖坑后人……,难道自增不香么。 |