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

小白问两个数据库的问题

  •  
  •   unt · 2023-01-04 15:48:20 +08:00 · 2261 次点击
    这是一个创建于 690 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 字段类型有必要严格按照真实类型和长度来设吗,很多时候直接 varchar(255)不行吗,我知道存储的字节数不一样,速度不一样,但是一般的小表都是 50 个字段内,数据量也不大,现在软件硬件性能也够,varchar 的扩展性非常强,对于有些项目,设置 int,datetime 等反而是给自己挖坑。所以说:在建表时如何确定设定的数据类型。

    2. 现在很多关系型数据是不是也是直接用 mongo 了,而不用 mysql 了
    第 1 条附言  ·  2023-01-04 16:45:01 +08:00
    注意注意⚠️:设成 varchar(255)不是为了图方便,而是对于后期扩展的恐惧,所以,不要跑偏,而是解答下如何克服这种恐惧以及如何应对后期扩展,如何做出权衡。
    26 条回复    2023-01-04 17:38:50 +08:00
    debuggerx
        1
    debuggerx  
       2023-01-04 16:02:27 +08:00
    其实很多奇奇怪怪的问题和所谓优化建议,本质原因都是 MySQL(尤其是很多经验丰富的老手死守的老版本)太过垃圾……
    littlewing
        2
    littlewing  
       2023-01-04 16:05:11 +08:00
    varchar (255) 完全么问题,只要别 char(255) 就行
    corcre
        3
    corcre  
       2023-01-04 16:08:20 +08:00
    2 不清楚, 1 的话我老东家(小作坊, 用的 sqlserver)就是用的 varchar 存 datetime, 每次需要做日期筛选的时候就想打人...特别是不知道谁做测试的时候没事就给我整几条"Wed Jan 04 2023 16:04:11 GMT+0800 (China Standard Time)", 所以我现在是 date/datetime 就按这个格式来, int 这些可能有扩展需求的可能会存成 float/decimal, varchar 这种就无所谓了, 反正就算留 255 用户也会给你塞爆, 用到的时候再加长度就好了...
    seers
        4
    seers  
       2023-01-04 16:09:23 +08:00 via Android
    191 用的比较多
    chenmobuys
        5
    chenmobuys  
       2023-01-04 16:13:46 +08:00
    用了 varchar 之后,感觉数据量大了查询会变慢
    unt
        6
    unt  
    OP
       2023-01-04 16:16:12 +08:00
    @chenmobuys #5 小数据量根本无感知的
    lwep
        7
    lwep  
       2023-01-04 16:17:06 +08:00
    看业务需求吧,以前用 varchar 来存 int 然后遇到要 order by 的情况,int 型就能正确排,varchar 按位排,程序里转来转去麻烦死,后来就乖乖改 int 了😂
    unt
        8
    unt  
    OP
       2023-01-04 16:17:58 +08:00
    @corcre #3 日期这种存 varchar 的话前后端(至少前端)肯定会校验的吧
    chenmobuys
        9
    chenmobuys  
       2023-01-04 16:18:28 +08:00
    @unt 你要是不在乎那就随便用。
    neoblackcap
        10
    neoblackcap  
       2023-01-04 16:19:06 +08:00
    @corcre sqlserver 帮你解决了一大票问题,MySQL 跟 sqlserver 比起来怕不是一个玩具。
    然后 mongo 不是关系型数据库,传统的数据库现在依然是主流。mongodb 只能说你们对数据库很熟,对业务的理解也很深,那么才好根据自己的需求去选。
    unt
        11
    unt  
    OP
       2023-01-04 16:19:10 +08:00
    @lwep #7 项目运行一段时间后,int 转 varchar 是完全无痛的吗,有没有坑
    shinession
        12
    shinession  
       2023-01-04 16:21:46 +08:00
    只有 OP 自己怎么弄都行, 团队合作的话不能由着性子来, 不然屎都不知道怎么屎的
    unt
        13
    unt  
    OP
       2023-01-04 16:23:36 +08:00
    @shinession #12 自己的话自由度很高的,前期造成的错误也是自己买单,总而言之就是“愿意承担风险”。但是团队就不一样了,烦,你需要对别人和对公司负责
    leonhao
        14
    leonhao  
       2023-01-04 16:30:18 +08:00
    1. 存储空间,性能差异非常大
    2. 不同类型操作不同,两个 varchar 能直接加吗?
    3. 约束

    你这个问题类型类似于 Java 里所有变量的 type 都定义为 String
    unt
        15
    unt  
    OP
       2023-01-04 16:32:09 +08:00
    @leonhao #14 变量不一样吧,差异巨巨巨巨巨大
    leonhao
        16
    leonhao  
       2023-01-04 16:36:58 +08:00
    @unt
    为啥不一样?按你的说法我也可以把 int 都定义成 String 。
    sunjiayao
        17
    sunjiayao  
       2023-01-04 16:38:09 +08:00
    varchar(255) 加不了组合索引
    lysS
        18
    lysS  
       2023-01-04 16:38:16 +08:00
    @leonhao mysql 中类型约束是不严格的(普通模式),所以可以 '1' + '1', 不合法的一般作为初始值。mysql 中没有类型报错。
    aweffr28
        19
    aweffr28  
       2023-01-04 16:42:35 +08:00
    191 好好一些+1 避免 utf8mb4 编码导致的加索引问题
    计算方法: Math.floor(768 / 4) -> 192, 取 191 。
    lookStupiToForce
        20
    lookStupiToForce  
       2023-01-04 16:43:06 +08:00   ❤️ 1
    不在乎锁死自己的未来 /给自己或公司的未来添堵的话当然随便啦🤪
    开发本来就是取舍,玩具类型的项目随你搞,要赚钱要给以后当轮子跑的项目不建议

    工作经验没体验过技术债?欠多了要还的时候总有想穿越时空扇自己巴掌的想法的
    lawlyet666
        21
    lawlyet666  
       2023-01-04 16:45:47 +08:00
    用 date 这种排序也方便啊
    zoharSoul
        22
    zoharSoul  
       2023-01-04 16:45:48 +08:00
    mongo 我在工作中, 几乎没见用的. 电商行业.
    unt
        23
    unt  
    OP
       2023-01-04 16:53:26 +08:00
    @seers #4
    @aweffr28 #19 谢谢,学到了
    8355
        24
    8355  
       2023-01-04 16:58:06 +08:00
    小数据量后台业务 类似 ERP CRM 类的 varchar255 无问题 扩展性还好 类似 title 类我觉得都没太大问题, 只要不是太过于无脑都可接受
    大数据量高访问量业务还是要斟酌一下
    1t1y1ILnW0x5nt47
        25
    1t1y1ILnW0x5nt47  
       2023-01-04 17:12:04 +08:00
    看成问小白两个问题,然后就进来了
    lwep
        26
    lwep  
       2023-01-04 17:38:50 +08:00
    @unt #11 旧项目已经那样了完全不想改,后来新项目的时候才改过来,还有上面说的如果用 varchar 存 yyyy-mm-dd 这样格式的时间,也会存在排序问题😁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 03:19 · PVG 11:19 · LAX 19:19 · JFK 22:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.