MySQL中定义数据字段的类型对你数据库的优化是非常重要的
MySQL支持所有标准SQL数值数据类型
MySQL支持多种类型,大致可以分为三类
1. 数值类型
类型 | 长度 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1字节 | (-128, 127) | (0,255) | 小整数型 |
SMALLINT | 2字节 | (-32768, 32767) | (0, 65535) | 大整数型 |
MEDIUMINT | 3字节 | (-8 388 608, 8 388 607) | (0, 16 777 215) | 大整数型 |
INT或INTEGER | 4字节 | (-2^31, 2^31-1) | (0,2^32-1)) | 大整数型 |
BIGINT | 8字节 | [-2^63 ,2^63 -1] | [0,2^64-1] | 极大整数值 |
Float(M,D) | 4字节 | 单精度浮点数,这里的D是精度,如果D<=24则为 默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。 | ||
Double(M,D) | 8字节 | 双精度浮点。 | ||
DECIMAL | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
2. 字符串类型
header 1 | header 2 | header3 |
---|---|---|
Char(M) | M | 定长字符串 |
VarChar(M) | M | 变长字符串,要求M<=255 |
Binary(M) | M | 类似Char的二进制存储,特点是插入定长不足补0 |
VarBinary(M) | M | 类似VarChar的变长二进制存储,特点是定长不补0 |
Tiny Text | Max:255 | 大小写不敏感 |
Text | Max:64K | 大小写不敏感 |
Medium Text | Max:16M | 大小写不敏感 |
Long Text | Max:4G | 大小写不敏感 |
TinyBlob | Max:255 | 大小写敏感 |
Blob | Max:64K | 大小写敏感 |
MediumBlob | Max:16M | 大小写敏感 |
LongBlob | Max:4G | 大小写敏感 |
Enum | 1或2 | 最大可达65535个不同的枚举值 |
Set | 可达8 | 最大可达64个不同的值 |
2.1 char和varchar
-
char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
-
char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),
所以varchar(4),存入3个字符将占用4个字节。 -
char类型的字符串检索速度要比varchar类型的快。
2.2 varchar和text
-
varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字
节。 -
text类型不能有默认值。
-
varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
3. 日期和时间类型
header 1 | header 2 | header3 |
---|---|---|
Date | 3 | 以YYYY-MM-DD的格式显示,比如:2020-07-19 |
Date Time | 8 | 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2020-07-19 11:22:30 |
TimeStamp | 4 | 以YYYY-MM-DD的格式显示,比如:2020-07-19 |
Time | 3 | 以HH:MM:SS的格式显示。比如:11:22:30 |