MySQL的数据类型以及int(11)的理解

在MySQL中,大致可以分成如下几种类型:
MySQL的数据类型以及int(11)的理解_第1张图片

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即可,除非对显示有特定的要求。

你可能感兴趣的:(mysql)