700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > mysql varchar 默认长度_MySQL VARCHAR类型字段到底可以定义多长

mysql varchar 默认长度_MySQL VARCHAR类型字段到底可以定义多长

时间:2019-06-24 18:54:05

相关推荐

mysql varchar 默认长度_MySQL VARCHAR类型字段到底可以定义多长

MySQL 单行行长最大是65535,不包含TEXT,BLOB类型。

varchar 长度小于255时,需要额外使用1字节存储长度,大于255时,需要

额外使用2字节存储长度。

varchar 栏位如果不定义not null 时,默认null也需要占1字节

lantin1字符集存储的每个值占1字节

gbk

字符集存储的每个值占2字节

utf8

字符集存储的每个值占3字节

那么一行varchar到底可以定义多长呢?lantin1长度=65535-存储长度大小 - default NULL大小

gbk长度=(65535-存储长度大小 - default NULL大小)/2

utf8长度=(65535-存储长度大小 - default NULL大小)/3

举例说明:

lantin1情况

lantin1 varchar设置两个字段sno小于255(

额外使用1字节存储长度),sname大于255(

额外使用2字节存储长度),所以单行varchar最大长度为:

mysql>select65535-1-2;

+-----------+

|65535-1-2|

+-----------+

|65532|

+-----------+

1rowinset(0.00sec)

sno varchar(1) not null+sname varchar(65531) not null=65532,建表成功

mysql>createtablemy8(snovarchar(1)notnull,snamevarchar(65531)notnull,primarykey(sno))CHARSET=latin1;

QueryOK,0rowsaffected(0.03sec)

mysql>droptablemy8;

QueryOK,0rowsaffected(0.01sec)

再看sno varchar(1) not null+sname varchar(65532) not null>65532,建表失败

mysql>createtablemy8(snovarchar(1)notnull,snamevarchar(65532)notnull,primarykey(sno))CHARSET=latin1;

ERROR1118(42000):Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.Thisincludesstorageoverhead,checkthemanual.YouhavetochangesomecolumnstoTEXTorBLOBs

如指定 not null sno varchar(1) sname varchar(65531) 就不行,因为有一个隐含的default null还占用1字节,建表失败

mysql>createtablemy8(snovarchar(1),snamevarchar(65531),primarykey(sno))CHARSET=latin1;

ERROR1118(42000):Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.Thisincludesstorageoverhead,checkthemanual.YouhavetochangesomecolumnstoTEXTorBLOBs

UTF8情况

UTF8 varchar设置两个字段sno小于255(额外使用1字节存储长度),sname大于255(额外使用2字节存储长度),utf8字符集存储的每个值占3字节,所以单行varchar最大长度为:

mysql>select(65535-1-2)/3;

+---------------+

|(65535-1-2)/3|

+---------------+

|21844.0000|

+---------------+

1rowinset(0.00sec)

sno varchar(1) not null+sname varchar(21844) not null>21844,建表失败

mysql>createtablemy8(snovarchar(1)notnull,snamevarchar(21844)notnull,primarykey(sno))CHARSET=utf8;

ERROR1118(42000):Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.Thisincludesstorageoverhead,checkthemanual.YouhavetochangesomecolumnstoTEXTorBLOBs

sno varchar(1) not null+sname varchar(21843) not null=21844,建表成功

mysql>createtablemy8(snovarchar(1)notnull,snamevarchar(21843)notnull,primarykey(sno))CHARSET=utf8;

QueryOK,0rowsaffected(0.02sec)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。