在MySQL中,大致可以分成如下几种类型:
1.数值型
(1)整型
数据类型 占的字节数 有符号范围 tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~8388607) int(m) 4个字节 范围(-2147483648~2147483647) bigint(m) 8个字节 范围(+-9.22*10的18次方)
注意:
1.取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。
2.int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度,个人觉得加m没用
3.如果向数据库中加范围以外的值是加不进去的,会报错误
(2)浮点型
数据类型 | 占的字节数 | 有效位数 |
---|---|---|
float(m,d) | 4字节 | 8位 |
double(m,d) | 8字节 | 16位 |
其中:
m=整数位数+小数位数
d=小数位数
设一个字段定义为float(5,2),如果插入一个123.456,数据库只会存123.46;不可以插入整数位大于3(即5-2)的数字。
(3)定点型
数据类型 | 字节数 |
---|---|
decimal(m,d) | m+2 |
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
其中:
m<65,d<30;
2.字符型
字符型包括:char,vchar,text,blob等;
类型 | 长度 | 最多字符 |
---|---|---|
char(n) | 固定长度 | 最多255字符 |
vchar(n) | 可变长度 | 最多65535字符 |
text | 可变长度 | 最多65535字符 |
blob | 可变长度 | 适合存照片 |
注意:对于name char(3),如果你插入’abcd’,会报错误(ERROR 1406 (22001): Data too long for column ‘name’ at row 1),而且不能插入数据库.对于网上有人说,超过你设定的长度会被截断,但是我测试的时候发现,超过设定长度根本不能存下,所以请以当前环境为准.
3.日期和时间类型
数据类型 | 占的字节数 | 含义 | 格式 |
---|---|---|---|
date | 3字节 | 日期 | 2017-01-01 |
time | 3字节 | 时间 | 10:38:10 |
datetime | 8字节 | 时间日期 | 2017-01-01 10:38:10 |
year | 1字节 | 年 | 2017 |
例子:
insert into test(date) values(“20170101”);
或者:insert into test(date) values(“2017-01-01”);
注意:
时间戳(timestamp)系统会自动添加当前时间,格式和datetime一样。
关于int(11)的理解:
例如:ID int(m);
在 integer 数据类型中,m 表示最大显示宽度。
在 int(m) 中,m 的值跟 int(m) 所占多少存储空间无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。唯一的不同就是显示给用户的方式不同(还要结合zerofill 才能看到)。
结论:
在创建表时,完全不需要写成ID int(m),写成ID int即可,除非对显示有特定的要求。