MySQL的数据类型及其选择建议
整数类型
整数类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
tinyint | 1 | 有符号-128 无符号0 | 有符号127 无符号255 |
smallint | 2 | 有符号-32768 无符号0 | 有符号32767 无符号 65535 |
mediumint | 3 | 有符号-8388608 无符号0 | 有符号8388607 无符号 1677215 |
int和integer | 4 | 有符号-2147483648 无符号0 | 有符号2147483647 无符号4294967295 |
bigint | 8 | 有符号-9223372036854775808 无符号0 | 有符号-9223372036854775807 无符号18446744073709551615 |
整数类型选择建议:
看所存储的整数数据的取值范围
浮点数类型、定点数类型、位类型
浮点数类型
浮点数类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
float | 4 | ±1.7549435E- 38 | ±3.402823466E +38 |
double | 8 | ±2.2250738585072014E -308 | ±1.7976931348623157E +308 |
float和double的选择建议:判断要存储的小数数据需要精确的小数位数,当需要精确到小数点 后10位以上,就需要选择double类型
定点数类型
定点数类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
dec(M,D)和decimal(M,D) | M+2 | 与double相同 | 与double相同 |
dec和decimal这两个定点数类型是同名词,该类型的取值范围与double类型相同,但其有效值的取值范围由M和D来决定。如果要存储小数数据精确度非常高,则可以选择dec或decimal类型,它们的精确度比double类型还要高。
位类型
位类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
bit(M) | 1~8 | bit(1) | bit(64) |
位类型bit的字节数是M,M的取值范围为1~8,即位类型bit类型的存储空间是根据其精确度决定的
日期和时间类型
日期和时间类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
date | 4 | 1000-01-01 | 9999-12-31 |
datetime | 8 | 1000-01-01 00:00:00 | 9999-12-3123:59:59 |
timestamp | 4 | 19700101080001 | 2038年的某个时刻 |
time | 3 | -835:59:59 | 838:59:59 |
year | 1 | 1901 | 2155 |
每种日期和时间数据类型都会有一个取值范围,如果插入的值超过了该类型的取值范围,则会插入默认值
各种日期和时间类型的应用场合如下:
表示年月日:一般会使用date类型
表示年月日时分秒:一般会使用datetime类型
经常插入或者更新日期为当前系统时间:一般会使用timestamp
表示时分秒:一般会使用time类型
表示年份:一般会使用year类型,因为该类型比date类型占用更少的空间
字符串类型(char系列、text系列、binary系列blob系列字符串类型)
char系列字符串类型
char系列字符串类型 | 字节 | 描述 |
---|---|---|
char(M) | M | M为0~255之间的整数 |
varchar(M) | M | M为0~65535之间的整数 |
字符串类型char的字节数是M,例如char(20)的数据类型为char,最大长度为20个字节,varchar的长度是可变的,其长度范围为0~65535之间的整数
char和varchar的选择:
需要判断所存储的字符串长度是否经常变化,如果经常变化则可以选择varchar,否则选择char
text系列字符串类型
text系列字符串类型 | 字节 | 描述 |
---|---|---|
tinytext | 0~255 | 值的长度为+2个字节 |
text | 0~65535 | 值的长度为+2个字节 |
mediumtext | 0~167772150 | 值的长度为+3个字节 |
longtext | 0~4294967295 | 值的长度为+4个字节 |
text系列字符串类型选择建议:
判断所存储字符串的长度,根据存储字符的长度来决定是选择允许长度最小的tinyint字符串类型,还是选择允许长度最大的longtext字符串类型
binary系列字符串类型
binary(M) | 字节 | 描述 |
---|---|---|
binary(M) | M | 允许长度为0~M |
varbinary(M) | M | 允许长度为0~M |
binary系列字符串类型非常重要:
和char、varchar类型非常相似
binary、varbinary可以存储二进制数据(例如照片、音乐或者视频文件),也可以存储字符数据
char、varchar只能存储字符数据
binary和varbinary的选择建议:
少量二进制数据,则可以选择binary和varbinary类型
判断出所存储二进制数据长度是否经常变化,如果经常变化则选择varbinary类型,否则选择binary
blob系列字符串类型
BLOB系列字符串类型 | 字节 |
---|---|
tinyblob | 0~255 |
blob | 0~2^16 |
mediumblob | 0~2^24 |
longblob | 0~2^32 |
blob系列字符串类型和text系列字符串类型非常相似
blob系列字符串类型可以存储二进制数据(例如照片、音乐或者视频文件),也可以存储字符数据
text系列字符串类型只能存储字符数据
blob系列字符串类型的选择建议:
看存储二进制数据的长度