mysql的字段长度_【mysql】字段类型和长度的解释
int(11)最⼤长度是多少,MySQL中varchar最⼤长度是多少?
int(11)最⼤长度是多少?
在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度。
这个11代表显⽰宽度,整数列的显⽰宽度与mysql需要⽤多少个字符来显⽰该列数值,与该整数需要的存储空间的⼤⼩都没有关系,⽐如,不管设定了显⽰宽度是多少个字符,bigint都要占⽤8个字节。
int是整型,(11)是指显⽰字符的长度,但要加参数的,最⼤为255,⽐如它是记录⾏数的id,插⼊10笔资料,它就显⽰00000000001
~~~00000000010,当字符的位数超过11,它也只显⽰11位,如果你没有加那个让它未满11位就前⾯加0的参数,它不会在前⾯加0
声明整型数据列时,我们可以为它指定个显⽰宽度M(1~255),如INT(5),指定显⽰宽度为5个字符,如果没有给它指定显⽰宽度,MySQL 会为它指定⼀个默认值。显⽰宽度只⽤于显⽰,并不能限制取值范围和占⽤空间,如:INT(3)会占⽤4个字节的存储空间,并且允许的最⼤值也不会是999,⽽是 INT整型所允许的最⼤值。
MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它们之间的区别是取值范围不同,存储空间也各不相同。
在整型数据列后加上UNSIGNED属性可以禁⽌负数,取值从0开始。
int范围
Type
Bytes
Minimum Value
Maximum Value
(Signed/Unsigned)
(Signed/Unsigned)
TINYINT
1
-128
127
255
SMALLINT
2
-32768
32767
65535
MEDIUMINT
3
-8388608
8388607
16777215
INT
4
-2147483648
mysql创建表数据类型2147483647
4294967295
BIGINT
8
-9223372036854775808
9223372036854775807
18446744073709551615
MySQL中varchar最⼤长度是多少?
⼀. varchar存储规则:
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,⽆论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最⼤⼤⼩是65532字节
Mysql4中最⼤也不过是20个字节,但是Mysql5根据编码不同,存储⼤⼩也不同。
⼆. varchar和char 的区别:
char是⼀种固定长度的类型,varchar则是⼀种可变长度的类型,它们的区别是: char(M)类型的数据列⾥,每个值都占⽤M个字节,如果某个长度⼩于M,MySQL就会在它的右边⽤空格字符补⾜.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列⾥,每个值只占⽤刚好够⽤的字节再加上⼀个⽤来记录其长度的字节(即总长度为L+1字节).
在MySQL中⽤来判断是否需要进⾏对据列类型转换的规则
1、在⼀个数据表⾥,如果每⼀个数据列的长度都是固定的,那么每⼀个数据⾏的长度也将是固定的.
2、只要数据表⾥有⼀个数据列的长度的可变的,那么各数据⾏的长度都是可变的.
3、如果某个数据表⾥的数据⾏的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表⾥的固定长度类型的数据列转换为相应的可变长度类型.例外:长度⼩于4个字符的char数据列不会被转换varchar类型
三.MySQL中varchar最⼤长度是多少?
这不是⼀个固定的数字。先简要说明⼀下限制规则。
1、限制规则
字段的限制在字段定义的时候有以下规则:
a) 存储限制
varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头⽤1到2个字节表⽰实际长度(长度超过255时需要2个字节),因此最⼤长度不能超过65535。
b) 编码长度限制
字符类型若为gbk,每个字符最多占2个字节,最⼤长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最⼤长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强⾏转为text类型,并产⽣warning。
c) ⾏长度限制
导致实际应⽤中varchar长度限制的是⼀个⾏定义的长度。 MySQL要求⼀个⾏的定义长度不能超过65535。若定义的表长度超过这个值,则提⽰
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。
2、计算例⼦
举两个例说明⼀下实际长度的计算。
a) 若⼀个表只有⼀个varchar类型,如定义为
create table t4(c varchar(N)) charset=gbk;
则此处N的最⼤值为(65535-1-2)/2= 32766。
减1的原因是实际⾏存储从第⼆个字节开始’;
减2的原因是varchar头部的2个字节表⽰长度;
除2的原因是字符编码是gbk。
b) 若⼀个表定义为
create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;
则此处N的最⼤值为 (65535-1-2-4-30*3)/3=21812
减1和减2与上例相同;
减4的原因是int类型的c占4个字节;
减30*3的原因是char(30)占⽤90个字节,编码是utf8。
如果被varchar超过上述的b规则,被强转成text类型,则每个字段占⽤定义长度为11字节,当然这已经不是“varchar”了。
则此处N的最⼤值为 (65535-1-2-4-30*3)/3=21812
create table t4(c int, c2 char(30), c3 varchar(21812)) ENGINE=InnoDB DEFAULT CHARSET=utf8
create table t5(c int, c2 varchar(30), c3 varchar(21812)) ENGINE=InnoDB DEFAULT CHARSET=utf8
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论