Home > Database > Mysql Tutorial > mysql的VACHAR的最大长度到底是多少_MySQL

mysql的VACHAR的最大长度到底是多少_MySQL

WBOY
Release: 2016-06-01 13:48:12
Original
1112 people have browsed it

bitsCN.com

 

今天群里有人问:

 

varchar 不是最大应该只可以设置65532(第一个字节+两个长度字节)吗 ,但是为什么可以设置成65533

以前一直都认为有两个字节来记录长度(长度小也可以用一个字节记录),所以这个问题当时觉得就挺无聊的

 

不过后来群里有人给了解释,突然才发现原来事情不是这么简单

 

MYSQL COMPACT格式,每条记录有一个字节来表示NULL字段分布,如果表中有字段允许为空,则最大只能定到65532,如果没有字段允许为空,则那个字节可以节省,最大可以定义到65533,不知道是不是这个原因

于是上网看了些资料,又在本地做了些实验,原来vachar的最大长度真的是不定的(根据是否有非空字段来决定)

 

在本地做了下实验,innodb+latin的环境

 

1 -- success 2 drop table if exists test; 3 create table test(name varchar(65533) not null)engine=innodb DEFAULT CHARSET=latin1 4   5 -- too large 6 drop table if exists test; 7 create table test(name varchar(65533))engine=innodb DEFAULT CHARSET=latin1

 

对于第二种情况,允许空字段的时候是不能加到65533的长度的,最大只能到65532,到底应该是引文的那种说法。

 

网上也有人做了类似的实验,参考http://stackoverflow.com/questions/8295131/best-practise-for-sql-varchar-column-length

 

  1 name varchar(100) not null will be 1 byte (length) + up to 100 chars (latin1) 2   3 name varchar(500) not null will be 2 bytes (length) + up to 500 chars (latin1) 4   5 name varchar(65533) not null will be 2 bytes (length) + up to 65533 chars (latin1) 6   7 name varchar(65532) will be 2 bytes (length) + up to 65532 chars (latin1) + 1 null byte

 

 

总结一下,原来mysql的vachar字段的类型虽然最大长度是65535,但是并不是能存这么多数据,最大可以到65533(不允许非空字段的时候),当允许非空字段的时候只能到65532,。

bitsCN.com
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template