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
zealinux
V2EX  ›  MySQL

MySQL 中 varchar(100)与 varchar(255)区别是什么?

  •  
  •   zealinux · 2020-04-17 11:43:12 +08:00 · 6309 次点击
    这是一个创建于 1680 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如我有个字段不会超过 64 个字符,那我数据库表创建的时候, 设置成

    varchar(100)与 varchar(255)

    有什么区别?

    猜想:255 肯定不会比 100 内存占用量两倍。


    之前 MySQL 中的字段长度都比较随意。

    14 条回复    2020-04-18 13:47:31 +08:00
    b821025551b
        1
    b821025551b  
       2020-04-17 11:44:10 +08:00
    索引,引擎优化
    est
        2
    est  
       2020-04-17 12:02:27 +08:00
    varchar 不设置为主键不设置为索引应该不会占内存呀。(要占缓存
    sadfQED2
        3
    sadfQED2  
       2020-04-17 12:25:02 +08:00 via Android
    不超过 64 个字符为啥不设置成 varchar64
    GoLand
        4
    GoLand  
       2020-04-17 12:28:51 +08:00
    varchar 长度是可变的,虽然定义的时候指定 255,但是存一个 100 长度的占用空间就是 100 个长度所占用的空间。https://dev.mysql.com/doc/refman/5.7/en/char.html
    wangyzj
        5
    wangyzj  
       2020-04-17 12:33:16 +08:00
    小于 100 的字符串存储 varchar100 和 varchar255 应该是没区别
    吧!
    Maboroshii
        6
    Maboroshii  
       2020-04-17 12:35:53 +08:00   ❤️ 1
    占用空间应该是相同的,不过 mysql 有个默认索引长度限制,varchar 太长了不能建索引
    x97bgt
        7
    x97bgt  
       2020-04-17 13:20:21 +08:00 via iPhone
    MYSQL 总的字段长度不能超过 65535 (好像是这个值)个字节。这在建表时会按可能的最大字符去计算,也就是 varchr 里的数字。
    另外存储上,超过 255 的 varchar,字段名会占据 2 字节,小于 255 次占用 1 字节。所以总字段长度不限制的情况下,一般把 varchar 的长度设成 255 。
    SjwNo1
        8
    SjwNo1  
       2020-04-17 13:22:32 +08:00
    不超过 64 个字符为啥不设置成 varchar64
    +1
    zealinux
        9
    zealinux  
    OP
       2020-04-17 14:04:26 +08:00
    @sadfQED2 @SjwNo1

    还是那个问题,varchar64 与 varchar100 的区别是什么?
    😄
    xpresslink
        10
    xpresslink  
       2020-04-17 14:16:27 +08:00
    varchar(100)与 varchar(255)主要区别:
    ( 1 )当存储的字符串长度小 100 时,两者占用的磁盘空间一样,但是消耗的内存不一样,更长的列消耗的内存会更多。因为 MySQL 通常会分配固定大小的内存块来保存内部值。尤其是使用临时表进行排序会操作时,会消耗更多的内存。在使用磁盘进行排序时,也是一样。

    (2)按照 SQL 标准向数据库里面插入数据时候,
    对长度大于 100 字符串,Varchar ( 100 )字自段就会丢弃大于 100 部分。
    对长度大于 255 字符串,Varchar ( 255 )字自段就会丢弃大于 255 部分。
    这是个很坑的特性。
    SjwNo1
        11
    SjwNo1  
       2020-04-17 14:53:01 +08:00
    @zealinux
    区别就是 预留的内存大小不一样,sql 存入长度超过你的预设会报错的
    Oktfolio
        12
    Oktfolio  
       2020-04-17 22:59:47 +08:00
    索引。
    msg7086
        13
    msg7086  
       2020-04-18 05:25:06 +08:00 via Android
    总的行长有限制。
    另外字符串长度还要考虑字符集,UTF8 存 64 字节字符串并不一定能存下 64 个字。
    Aresxue
        14
    Aresxue  
       2020-04-18 13:47:31 +08:00
    真实占用没区别,但是在索引创建方面有区别,也会影响总的行长,进而影响行的组织方式,可能会频繁引起页分裂啥的,所以能确定小于 64 就 varchar(64), 后续可能会有改动又不知道多大就直接 varchar(255),不然从小改到大锁表时间,还有上面说到的页分裂都有可能引发问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2922 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:23 · PVG 11:23 · LAX 19:23 · JFK 22:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.