> 데이터 베이스 > MySQL 튜토리얼 > mysql的VACHAR的最大长度到底是多少_MySQL

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

WBOY
풀어 주다: 2016-06-01 13:48:12
원래의
1091명이 탐색했습니다.

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
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿