› 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 · Apr 17, 2020 · 7196 views
    This topic created in 2354 days ago, the information mentioned may be changed or developed.

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

    varchar(100)与 varchar(255)

    有什么区别?

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


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

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

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

    (2)按照 SQL 标准向数据库里面插入数据时候,
    对长度大于 100 字符串,Varchar ( 100 )字自段就会丢弃大于 100 部分。
    对长度大于 255 字符串,Varchar ( 255 )字自段就会丢弃大于 255 部分。
    这是个很坑的特性。
    SjwNo1
        11
    SjwNo1  
       Apr 17, 2020
    @zealinux
    区别就是 预留的内存大小不一样,sql 存入长度超过你的预设会报错的
    Oktfolio
        12
    Oktfolio  
       Apr 17, 2020
    索引。
    msg7086
        13
    msg7086  
       Apr 18, 2020 via Android
    总的行长有限制。
    另外字符串长度还要考虑字符集,UTF8 存 64 字节字符串并不一定能存下 64 个字。
    Aresxue
        14
    Aresxue  
       Apr 18, 2020
    真实占用没区别,但是在索引创建方面有区别,也会影响总的行长,进而影响行的组织方式,可能会频繁引起页分裂啥的,所以能确定小于 64 就 varchar(64), 后续可能会有改动又不知道多大就直接 varchar(255),不然从小改到大锁表时间,还有上面说到的页分裂都有可能引发问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1265 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 16:51 · PVG 00:51 · LAX 09:51 · JFK 12:51
    ♥ Do have faith in what you're doing.