zoukankan      html  css  js  c++  java
  • mysql char与varchar类型, 行的大小限制

    charvarchar类型相似,但它们被存储和检索的方式不同。它们的最大长度以及是否保留尾随空格也不同。

    char和varchar声明,其长度表示最大字符数。比如char(30),表示最多存储30个字符。

    char列被固定在创建表声明的长度。范围是0到255之间的任何值。char存储值时,将在它们的右边填充空格以达到指定的长度。CHAR被检索到的值,拖尾的空格被删除,除非 PAD_CHAR_TO_FULL_LENGTH启用SQL模式。

    varchar列是可变长度的字符串。范围是0到65535之间的值。有效最大长度 VARCHAR取决于最大行大小(65,535字节,在所有列之间共享)和所使用的字符集。

    与相比charvarchar值存储为1字节或2字节长的前缀加数据。长度前缀指示值中的字节数。如果值需要不超过255个字节,则列使用一个长度字节;如果值可能需要不超过255个字节,则列使用两个长度字节。

    ValueCHAR(4)需要存储VARCHAR(4)需要存储
    '' '    ' 4 bytes '' 1 byte
    'ab' 'ab  ' 4 bytes 'ab' 3 bytes
    'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
    'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes

    varchar声明255是个临界值,大于就需要二个字节来记录字节数;小于则只需要一个字节来记录。

    MySQL对每个表有4096列的硬限制。MySQL表的内部表示具有65,535字节的最大行大小限制。

    mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),
           c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
           f VARCHAR(10000), g VARCHAR(6000)) ENGINE=InnoDB CHARACTER SET latin1;
    ERROR 1118 (42000): Row size too large. The maximum row size for the used
    table type, not counting BLOBs, is 65535. This includes storage overhead,
    check the manual. You have to change some columns to TEXT or BLOBs
    mysql> CREATE TABLE t2
           (c1 VARCHAR(65535) NOT NULL)
           ENGINE = InnoDB CHARACTER SET latin1;
    ERROR 1118 (42000): Row size too large. The maximum row size for the used
    table type, not counting BLOBs, is 65535. This includes storage overhead,
    check the manual. You have to change some columns to TEXT or BLOBs

    占2个字节,所以应该缩小 <= 65533

    mysql> CREATE TABLE t2
           (c1 VARCHAR(65533) NOT NULL)
           ENGINE = InnoDB CHARACTER SET latin1;
    Query OK, 0 rows affected (0.01 sec)
  • 相关阅读:
    面向对象设计原则之二:开放封闭原则
    面向对象设计原则之一:单一职责原则
    设计模式之四:适配器模式(Adapter Pattern)
    面向对象设计原则之六:合成/聚合复用原则
    设计模式之三:迭代器模式(IteratorPattern)
    面向对象设计原则之五:迪米特法则
    设计模式之二:观察者模式(Observer Pattern)
    五分钟搭建 Flash 视频直播站
    Flash Media Server 3 开发版供下载
    不掉线的路由器路由特殊技术分析
  • 原文地址:https://www.cnblogs.com/song27/p/14441505.html
Copyright © 2011-2022 走看看