整数类型:TINYINT、SAMLLINT、MEDIUMINT、INT、BIGINT--1字节、2、3.、4、8
浮点数类型:FLOAT(m,d)、DOUBLE(m,d)==REAL-4字节、8
定点数类型:DECIMAL(m,d)、NUMERIC-m+2字节、8
位类型:BIT(m)-1-8字节
各个类型的详细范围可以参考mysql文档
数据类型小例:
1.整数类型
create table t1
(
id int,
id2 int(4)
);
insert t1 select1,2;
select * from t1;
+------+------+
| id| id2|
+------+------+
|1|2|
+------+------+
alter table t1 modify id int zerofill;
alter table t1 modify id2(4) int zerofill;
select * from t1;
+------------+------------+
| id| id2|
+------------+------------+
|0000000001|0002|
+------------+------------+
insert t1 select1,11111;
Select * from t1;
+------------+------------+
| id| id2|
+------------+------------+
|0000000001|0002|
|0000000001|11111|
+------------+------------+
insert t1 select -1,-2;
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Error | 1264 | Out of range value for column 'id' at row 1 |
+-------+------+---------------------------------------------+
结论:
1. INT类型默认宽度11
2上面的zerofill属性可以在int指定宽度不足时候在前面补上0
3.在插入的数值实际长度超过INT类型指定宽度时,忽略宽度,插入正确数值;
4.在拥有zerofill属性后的int字段自动加上属性UNSIGNED,范围从0开始
2.小数类型
小数分成浮点数和定点数。浮点数包括单精度的FLOAT和双精度的DOUBLE;定点数则在内部以字符串形式存放,比较是和货币等高精度数据。
小数类型后面的(m,d)前者表示数字共有m个数字(整数+小数位),小数点后面有d个数字位。
create table t2
(
col1 float(5,2),
col2 decimal(5,2)
);
insert t2 select1.11,1.11;
select * from t2;
+------+------+
| col1 | col2 |
+------+------+
|1.11|1.11|
+------+------+
insert t2 select1.225,1.225;
select * from t2;
+------+------+
| col1 | col2 |
+------+------+
|1.11|1.11|
|1.23|1.23|
+------+------+
alter table t2 modify col1 float;
alter table t2 modify col2 decimal;
select * from t2;
+------+------+
| col1 | col2 |
+------+------+
|1.11|1|
|1.23|1|
|1.11|1|
+------+------+
insert t2 select1.611111,1.6111111;
select * from t2;
+---------+------+
| col1| col2 |
+---------+------+
|1.11|1|
|1.23|1|
|1.11|1|
|1.61111|2|
+---------+------+
结论:
1.指定了小数位数后,如果插入的数的小数位数超过,会自动截断,并且四舍五入;
2.修改小数位数后,decima会对现有数据进行自动截断,以符合现在的数据类型;
3.默认的decimal的m,d分别为10和0也就是默认整形;
3.bit数值类型
Bit(m)中m的范围从1-64默认为1。
create table t3
(
col bit(1)
);
insert t3 select2;
+-------+------+-----------------------------------------+
| Level | Code | Message|
+-------+------+-----------------------------------------+
| Error |1406| Data too long for column 'col' at row1|
+-------+------+-----------------------------------------+
alter table t3 modify col bit(6);
insert t3 select2;
select * from t3;
+------+
| col|
+------+
||
+------+
select BIN(col),hex(col) from t3 ;
+----------+----------+
| BIN(col) | hex(col) |
+----------+----------+
|10|2|
+----------+----------+
结论:
1.插入bit字段数值时,首先会把值转成2进制;如果位数比自定的长度大,插入失败;
2.直接显示bit类型数据,结果为null;需要使用bin()或者hex()等函数转化后显示;