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

小白问两个数据库的问题

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

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

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