目录
数据类型
定义数据类型的本质
定义数据类型本质上是在定义列
数据分类的意义
- 分配合适的存储空间;
- 采用不同的操作方法;
- 对应不同的需求。
整数类型
- MySQL中提供多种对于数值的数据类型;
- 不同的数据类型取值范围不同;
- 取值范围越大,需要的存储空间也越大。
有符号(默认)
创建一个含有tinyint字段的表:
mysql> create table t3
-> (col1 tinyint
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> show create table t3;
+-------+---------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------+
| t3 | CREATE TABLE `t3` (
`col1` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
插入一条127大小的数据:
mysql> insert into t3 values (127);
Query OK, 1 row affected (0.00 sec)
插入一条大于127数值的数据:
mysql> insert into t3 values (255);
Query OK, 1 row affected, 1 warning (0.00 sec)
查询查看结果:
mysql> select * from t3;
+------+
| col1 |
+------+
| 127 |
| 127 |
+------+
2 rows in set (0.00 sec)
创建 tinyint 默认是有符号的,最大值为 +127,所以插入大于127的数值默认为127。
无符号
创建一个表,一个含有tinyint字段,且无符号的表:
mysql> create table t4
-> (col1 tinyint unsigned
-> );
Query OK, 0 rows affected (0.00 sec)
分别插入两条数据,一条为 127,一条大于 127的数据:
mysql> insert into t4 values (127);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t4 values (255);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t4;
+------+
| col1 |
+------+
| 127 |
| 255 |
+------+
2 rows in set (0.00 sec)
注:
有无符号在创建表时指定,如果没有指定,默认创建是有符号的。
指定最大显示长度
并不是表示只能插入x数字,表示显示最长x数字:
最大长度
创建一个长度为10的int字段的表:
mysql> create table t5
-> (col1 int(10));
Query OK, 0 rows affected (0.01 sec)
插入一条长度为10的数据:
mysql> insert into t5 values (1234567890);
Query OK, 1 row affected (0.01 sec)
插入一条长度大于10的数据:
mysql> insert into t5 values (12345678900);
Query OK, 1 row affected, 1 warning (0.00 sec)
查看数据:
mysql> select * from t5;
+------------+
| col1 |
+------------+
| 1234567890 |
| 2147483647 |
+------------+
3 rows in set (0.00 sec)
超出最大值,赋值默认最大值。
无影响
创建一个长度为3的int字段的表,分别插入一条长度为3,和一条长度为4的数据:
mysql> create table t6
-> (col1 int(3));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t6 values(123);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t6 values(1234);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t6;
+------+
| col1 |
+------+
| 123 |
| 1234 |
+------+
2 rows in set (0.00 sec)
填充(zerofill)
创建一个长度为3的int字段的表(zerofill填充),分别插入三条数据,长度为别为3,2,1:
mysql> create table t7 (col1 int(3) zerofill);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t7 values(123),(11),(1);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from t7;
+------+
| col1 |
+------+
| 123 |
| 011 |
| 001 |
+------+
3 rows in set (0.00 sec)
显示长度,如果小于3,前面会用0填充;
整型类型的选择
根据业务进行相应的选择,以下举例而已: