小白问两个数据库的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生的内容
unt
V2EX    程序员

小白问两个数据库的问题

  •  
  •   unt 2023-01-04 15:48:20 +08:00 2693 次点击
    这是一个创建于 1016 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 。
    luman
        17
    luman  
       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     Solana     941 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 22:31 PVG 06:31 LAX 15:31 JFK 18:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86