mysql varchar 最大长度 65535
2014-10-12 15:01
120 查看
以前一直都认为有两个字节来记录长度(长度小也可以用一个字节记录),所以这个问题当时觉得就挺无聊的不过后来群里有人给了解释,突然才发现原来事情不是这么简单
MYSQL COMPACT格式,每条记录有一个字节来表示NULL字段分布,如果表中有字段允许为空,则最大只能定到65532,如果没有字段允许为空,则那个字节可以节省,最大可以定义到65533,不知道是不是这个原因
于是上网看了些资料,又在本地做了些实验,原来vachar的最大长度真的是不定的(根据是否有非空字段来决定)
在本地做了下实验,innodb+latin的环境
复制代码代码如下:
-- success
drop table if exists test;
create table test(name varchar(65533) not null)engine=innodb DEFAULT CHARSET=latin1
-- too large
drop table if exists test;
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
复制代码代码如下:
name varchar(100) not null will be 1 byte (length) + up to 100 chars (latin1)
name varchar(500) not null will be 2 bytes (length) + up to 500 chars (latin1)
name varchar(65533) not null will be 2 bytes (length) + up to 65533 chars (latin1)
name varchar(65532) will be 2 bytes (length) + up to 65532 chars (latin1) + 1 null byte
总结一下,原来mysql的vachar字段的类型虽然最大长度是65535,但是并不是能存这么多数据,最大可以到65533(不允许非空字段的时候),当允许非空字段的时候只能到65532。
MYSQL COMPACT格式,每条记录有一个字节来表示NULL字段分布,如果表中有字段允许为空,则最大只能定到65532,如果没有字段允许为空,则那个字节可以节省,最大可以定义到65533,不知道是不是这个原因
于是上网看了些资料,又在本地做了些实验,原来vachar的最大长度真的是不定的(根据是否有非空字段来决定)
在本地做了下实验,innodb+latin的环境
复制代码代码如下:
-- success
drop table if exists test;
create table test(name varchar(65533) not null)engine=innodb DEFAULT CHARSET=latin1
-- too large
drop table if exists test;
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
复制代码代码如下:
name varchar(100) not null will be 1 byte (length) + up to 100 chars (latin1)
name varchar(500) not null will be 2 bytes (length) + up to 500 chars (latin1)
name varchar(65533) not null will be 2 bytes (length) + up to 65533 chars (latin1)
name varchar(65532) will be 2 bytes (length) + up to 65532 chars (latin1) + 1 null byte
总结一下,原来mysql的vachar字段的类型虽然最大长度是65535,但是并不是能存这么多数据,最大可以到65533(不允许非空字段的时候),当允许非空字段的时候只能到65532。
相关文章推荐
- MySQL varchar最大长度,text类型占用空间剖析
- 修改text/ntext/image 配置的最大长度65535
- mysql varchar单行最大字节数65535和字段长度的正确理解
- Mysql VARCHAR的最大长度到底是多少
- MySQL VARCHAR的最大长度到底是多少
- mysql VARCHAR的最大长度到底是多少
- tcp send函数发送的最大长度可以超过65535字节吗?
- mysql VARCHAR的最大长度到底是多少
- MySQL 单条记录长度最大65535
- 1006. 求和游戏--最大子数列求和(子数列长度大于1)
- TCP/IP协议:最大报文段长度(MSS)是如何确定的(2)
- Internet Explorer允许的URL最大长度为2083个字符(Maximum URL length is 2,083 characters in Internet Explorer)
- asp.net 文件上传重设最大长度限制
- windows最大路径长度
- Web service 超过了最大请求长度 错误解决
- ORACLE VARCHAR2最大长度是4000?还是32767?
- 最大公共子串长度问题
- PING的最大长度
- java中数组的最大长度以及List的最大容量
- VK Cup 2015 - Qualification Round 1 A. Reposts(map最大连续长度)