V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yqmac
V2EX  ›  Java

偷懒导致的 mysql 类型转换的问题

  •  
  •   yqmac · 2020-01-02 19:22:14 +08:00 · 3715 次点击
    这是一个创建于 1812 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:接手了别人的代码,id 用的 varchar 但是内容是拼接出来的时间戳,都是长整型。

    蓝后,写个 select 语句,偷懒,一直懒得加单引号 突然发现一个 select 出来了 6 条,卧槽,大问题,id 生成策略会重复。 面对重型生产问题,一步步查,怎么都觉得不会重复,一看,卧槽,这六条 id 不一致啊。 …… 当当当当~ select 661843814642404550000000 = '661843814642404556823288' 得到 1 突然惊醒 mysql 数据转换有问题,一查文档,果然,丢精度。所以,偷懒没好处……各位引以为戒。

    16 条回复    2020-01-05 13:25:02 +08:00
    tedderchan
        1
    tedderchan  
       2020-01-02 20:02:41 +08:00
    第一次听说有人 id 用 varchar, 我我也是醉了
    KasuganoSoras
        2
    KasuganoSoras  
       2020-01-02 20:11:41 +08:00
    第一次听说有人 id 用 varchar
    walpurgis
        3
    walpurgis  
       2020-01-02 20:28:34 +08:00 via Android
    看见弱类型语言出现大数字要警惕,上次碰到前端 js 接收的 JSON 里有个 20 位数字,末尾都是 0,同样的问题
    CStarter
        4
    CStarter  
       2020-01-02 20:39:38 +08:00 via Android
    @tedderchan id 用 uuid,就是 varchar 啊
    sx90
        5
    sx90  
       2020-01-02 21:59:47 +08:00
    id,不是表格内部自增号吗🤣
    opengps
        6
    opengps  
       2020-01-02 22:30:20 +08:00
    id 用 varchar 不是问题,uuid 就用 varchar 存储。不正常的是类型不严格
    luozic
        7
    luozic  
       2020-01-03 03:06:25 +08:00 via iPhone
    丢精度这是 feature ?;类型系统这个东西有一本非常厚的书,一般用的语言类型系统都是半生不熟,sql 这东西设计里面就没有非常严格的类型系统玩。
    msg7086
        8
    msg7086  
       2020-01-03 04:13:43 +08:00
    @Tranvin @opengps
    UUID 严格来说应该是 BINARY(16),就算用文本存储也不是 VARCHAR 而是 CHAR(36)或者 CHAR(32)。
    guanhui07
        9
    guanhui07  
       2020-01-03 07:19:54 +08:00
    第一次听说有人 id 用 varchar
    opengps
        10
    opengps  
       2020-01-03 08:30:18 +08:00 via Android
    我要是在本帖回一句,我最自豪的数据库设计是无主键,是不是会被鄙视😃😄😁😀
    ZredoC
        11
    ZredoC  
       2020-01-03 08:51:47 +08:00
    图怎么莫得了
    ytll21
        12
    ytll21  
       2020-01-03 08:53:48 +08:00
    @opengps 把你的故事说出来 :P
    opengps
        13
    opengps  
       2020-01-03 09:22:58 +08:00   ❤️ 1
    @ytll21 之前分享过连接,主要核心就一个:匹配业务。
    用于传感器采集类业务的巨型表设计(关系型数据库版): https://www.opengps.cn/Blog/View.aspx?id=284&from=v2ex
    lskjdfgl
        14
    lskjdfgl  
       2020-01-03 10:32:34 +08:00
    抓紧看了下我的数据库设计,现在改也不知道来不来的及😂
    qq1054000800
        15
    qq1054000800  
       2020-01-03 19:04:54 +08:00
    innode 引擎,用 uuid 做主键是非常糟糕的设计
    yqmac
        16
    yqmac  
    OP
       2020-01-05 13:25:02 +08:00
    说实话,系统我是个接盘侠,主键 uuid 或者这种长整型的 varchar 也是恨不能理解的……但是这个玩意已经无法更改了啊,前人挖坑后人……,难道自增不香么。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2034 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 00:01 · PVG 08:01 · LAX 16:01 · JFK 19:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.