• 请不要在回答技术问题时复制粘贴 AI 生成的内容
unt
V2EX  ›  程序员

小白问两个数据库的问题

  •  
  •   unt · Jan 4, 2023 · 3140 views
    This topic created in 1235 days ago, the information mentioned may be changed or developed.
    1. 字段类型有必要严格按照真实类型和长度来设吗,很多时候直接 varchar(255)不行吗,我知道存储的字节数不一样,速度不一样,但是一般的小表都是 50 个字段内,数据量也不大,现在软件硬件性能也够,varchar 的扩展性非常强,对于有些项目,设置 int,datetime 等反而是给自己挖坑。所以说:在建表时如何确定设定的数据类型。

    2. 现在很多关系型数据是不是也是直接用 mongo 了,而不用 mysql 了
    Supplement 1  ·  Jan 4, 2023
    注意注意⚠️:设成 varchar(255)不是为了图方便,而是对于后期扩展的恐惧,所以,不要跑偏,而是解答下如何克服这种恐惧以及如何应对后期扩展,如何做出权衡。
    26 replies    2023-01-04 17:38:50 +08:00
    debuggerx
        1
    debuggerx  
       Jan 4, 2023
    其实很多奇奇怪怪的问题和所谓优化建议,本质原因都是 MySQL(尤其是很多经验丰富的老手死守的老版本)太过垃圾……
    littlewing
        2
    littlewing  
       Jan 4, 2023
    varchar (255) 完全么问题,只要别 char(255) 就行
    corcre
        3
    corcre  
       Jan 4, 2023
    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  
       Jan 4, 2023 via Android
    191 用的比较多
    chenmobuys
        5
    chenmobuys  
       Jan 4, 2023
    用了 varchar 之后,感觉数据量大了查询会变慢
    unt
        6
    unt  
    OP
       Jan 4, 2023
    @chenmobuys #5 小数据量根本无感知的
    lwep
        7
    lwep  
       Jan 4, 2023
    看业务需求吧,以前用 varchar 来存 int 然后遇到要 order by 的情况,int 型就能正确排,varchar 按位排,程序里转来转去麻烦死,后来就乖乖改 int 了😂
    unt
        8
    unt  
    OP
       Jan 4, 2023
    @corcre #3 日期这种存 varchar 的话前后端(至少前端)肯定会校验的吧
    chenmobuys
        9
    chenmobuys  
       Jan 4, 2023
    @unt 你要是不在乎那就随便用。
    neoblackcap
        10
    neoblackcap  
       Jan 4, 2023
    @corcre sqlserver 帮你解决了一大票问题,MySQL 跟 sqlserver 比起来怕不是一个玩具。
    然后 mongo 不是关系型数据库,传统的数据库现在依然是主流。mongodb 只能说你们对数据库很熟,对业务的理解也很深,那么才好根据自己的需求去选。
    unt
        11
    unt  
    OP
       Jan 4, 2023
    @lwep #7 项目运行一段时间后,int 转 varchar 是完全无痛的吗,有没有坑
    shinession
        12
    shinession  
       Jan 4, 2023
    只有 OP 自己怎么弄都行, 团队合作的话不能由着性子来, 不然屎都不知道怎么屎的
    unt
        13
    unt  
    OP
       Jan 4, 2023
    @shinession #12 自己的话自由度很高的,前期造成的错误也是自己买单,总而言之就是“愿意承担风险”。但是团队就不一样了,烦,你需要对别人和对公司负责
    leonhao
        14
    leonhao  
       Jan 4, 2023
    1. 存储空间,性能差异非常大
    2. 不同类型操作不同,两个 varchar 能直接加吗?
    3. 约束

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

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