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

设计数据库表结构的字段类型时候, varchar(?) 里面的数字怎么确定?

  •  
  •   zealinux · 2021-04-24 12:41:15 +08:00 · 2547 次点击
    这是一个创建于 1338 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到之前公司的 DB 里,这些值应该是随便设的,

    有很多数值: 100,125, 128,255,256,510,512,522...

    现在需要规范一下,

    现在这个数值一般怎么确定?

    12 条回复    2021-04-25 10:19:53 +08:00
    akira
        1
    akira  
       2021-04-24 13:08:55 +08:00
    根据实际情况来呀。。。
    gBurnX
        2
    gBurnX  
       2021-04-24 13:21:27 +08:00
    1.有很多东西,最大长度是有规范可查的,比如 URL 最大长度、路径最大长度、身份证最大长度、电话号码最大长度等等。

    2.没有规范的,以及与业务相关的,建议先与业务人员、产品经理进行讨论。然后,在设备性能富足的情况下,尽量给讨论后定下的容量多加 50% ~ 200%。多留余量肯定没错。
    fiypig
        3
    fiypig  
       2021-04-24 13:32:12 +08:00 via iPhone
    全部 128
    Muninn
        4
    Muninn  
       2021-04-24 13:46:10 +08:00
    @gBurnX 说的对,主要根据业务。 当需要留富足的时候,如果接近 255 可以用 255,在某些数据库的某些引擎下,255 是一个临界值,会有一丢丢好处。
    h82258652
        5
    h82258652  
       2021-04-24 13:46:17 +08:00
    直接 LONGTEXT 干,后面有问题再优化
    ired
        6
    ired  
       2021-04-24 16:33:03 +08:00   ❤️ 1
    varchar 定义的长度的单位是字符。
    <= 255 的,就用 255 。
    原因是,varchar 底层存储需要有一个字节来记录字符数量,一个字节最多可以表示 255,大于 255 就需要有两个字节来表示。
    > 255 的按照实际情况来。
    zealinux
        7
    zealinux  
    OP
       2021-04-24 16:52:45 +08:00
    @ired 是不是> 255 的就用 varchar(511) ?
    caliburn1994
        8
    caliburn1994  
       2021-04-24 17:18:49 +08:00 via Android
    你去看看 psql 定义的几个大小,挑合适的就好
    ired
        9
    ired  
       2021-04-24 18:09:56 +08:00
    @zealinux 为啥时 511 ? 2 个字节 2^8 是 65536 - 1 65535 啊?所以 varchar 最大是 varchar(65535)
    ired
        10
    ired  
       2021-04-24 18:16:18 +08:00
    @ired 写错了,2^8 => 2^16
    zealinux
        11
    zealinux  
    OP
       2021-04-24 21:40:36 +08:00
    @ired 如果 256 < x < 512, 那就设置 varchar(512-1)? 需要减掉 1,512=2^8
    clf
        12
    clf  
       2021-04-25 10:19:53 +08:00
    能 255 内的就 255,按照字段的最大值+50%~200%的余量。

    varchar 在超过 255 的时候需要有两个字节的头部用于存储字符长度(类似于 TEXT ),低于 255 的时候只需要一个字节(类似于 TINYTEXT )

    需要长文本的一般都是用非关数据库存储或者专门的 CMS 系统里。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   921 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:35 · PVG 06:35 · LAX 14:35 · JFK 17:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.