mysql数据类型

Mysql的Json类型
MySQL字段类型VARCHAR
varchar(n),n表示什么
MySQL5.0.3之前varchar(n)这里的n表示字节数
MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200),不管是英文还是中文都可以存放200个
VARCHAR字段限制原因
字段的限制在字段定义的时候有以下规则:

a) 存储限制
varchar字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。
b) 编码长度限制
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
c) 行长度限制
导致实际应用中varchar长度限制的是一个行定义的长度。
MySQL要求一个行的定义长度不能超过65535。
若定义的表长度超过这个值,则提示“ERROR 1118 (42000): Row size too large. ”
举两个例说明一下实际长度的计算。
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个字节;
减303的原因是char(30)占用90个字节,编码是utf8。
如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,即字段不再是“varchar”。
MySQL SET数据类型
MySQL性能优化之char、varchar、text的区别
mysql的char,varchar,text类型的区别总结
理论上varchar的长度最大65535字符,但能不能这么设置也得看字符集,因为mysql有规定,除了text和blob之类的类型外,单字段长度不能超过65535字节,所以,如果字符集是最基础的latin1,一个字符一个字节,那就可以定义varchar(65535),但如果设置为utf8,一个字符3个字节,那就只能定义varchar(21485)

对于使用了BLOB或TEXT大量删除或更新时,建议定期使用 optimize table 碎片整理
MySQL数字类型int与tinyint、float与decimal如何选择

  1. DECIMAL类型占用字节数计算方法 —— 小数和整数分别计算,每9位数占4字节,剩余部分如下表换算:
Leftover Digits Number of Bytes
0 0
1–2 1
3–4 2
5–6 3
7–9 4

使用decimal做除法依旧会产生浮点型,所以特殊情况请考虑使用整型

2.int类型占用字节数

Type Storage Minimum Value Maximum Value
- (Bytes) (Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
- - 0 255
SMALLINT 2 -32768 32767
- - 0 65535
MEDIUMINT 3 -8388608 8388607
- - 0 16777215
INT 4 -2147483648 2147483647
- - 0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
- - 0 18446744073709551615

你可能感兴趣的:(mysql数据类型)