V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
0xLittleFi
V2EX  ›  MySQL

想问下 平时工作中, mysql 的字段长度的设定有什么固定规范吗?是喜欢用 varchar(255)还是 varchar(256)

  •  
  •   0xLittleFi · 2022-11-27 14:48:34 +08:00 · 3261 次点击
    这是一个创建于 730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我个人是一直用 2 的每次方进行设计 varchar 的长度,其他的比如 bigint:20 int:4

    我也搜了下网上的回答: char, varchar 类型的值,会有一个长度标识位来存值长度。 当定义 varchar 长度小于等于 255 时,长度标识位需要一个字节; 当大于 255 时,长度标识位需要两个字节

    cc: https://stackoverflow.com/questions/2340639/why-historically-do-people-use-255-not-256-for-database-field-magnitudes

    8 条回复    2023-02-02 17:03:55 +08:00
    billlee
        1
    billlee  
       2022-11-27 15:13:02 +08:00
    真要抠这点细节,那要看整个表的一行有多大,凑成页面大小。
    eason1874
        2
    eason1874  
       2022-11-27 16:08:34 +08:00   ❤️ 8
    看你要不要索引,要索引的话,191 比较常用,你可以看到很多开源项目都是 varchar(191)

    MySQL 以前的 utf8 只支持到三字节,5.7.7 之前版本的 InnoDB varchar 索引长度是 255 * 3 ,要兼容四字节 utf8mb4 的话就是 (255 * 3) / 4 = 191.25 ,取整数就是 191
    Leviathann
        3
    Leviathann  
       2022-11-27 16:38:30 +08:00
    索引有 767 长度限制
    如果是 3bytes 字符集就是 255
    如果是 4bytes 就是 191
    jaoyina
        4
    jaoyina  
       2022-11-27 17:12:22 +08:00   ❤️ 1
    字段不要太多,我碰到总字节数不能超过 65535 的问题,导致建表失败。
    0xLittleFi
        5
    0xLittleFi  
    OP
       2022-11-27 20:20:02 +08:00
    @eason1874 其他的字段呢,比如 int bigint 啥的,也同样有说法?
    eason1874
        6
    eason1874  
       2022-11-27 20:56:31 +08:00   ❤️ 1
    @0xLittleFi 其他的没听过,可以看这个页面 https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html

    我记错了,我之前不知道在哪儿看到说新版没有 767 限制了,但是文档看起来新版默认还是限制 767
    LeegoYih
        7
    LeegoYih  
       2022-11-27 22:00:18 +08:00
    比较小的字符串我会用 191 或者 64
    postgres 比较香,直接 text 梭哈了,除非特殊场景

    int bigint 这种可以不写长度,因为 mysql 并不能限制
    fengyedzf
        8
    fengyedzf  
       2023-02-02 17:03:55 +08:00   ❤️ 2
    这篇文章有解析,但 in english
    https://news.ycombinator.com/item?id=27189998
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1877 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:31 · PVG 00:31 · LAX 08:31 · JFK 11:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.