1、整数类型
这些整数类型的存储值的范围可以从-2(N-1) 到2(N-1) ,其中N是存储空间的位数。整数类型可选的UNSIGNED属性表示不允许负值,着大致可以使得正数的上限提高一倍。有符号和无符号使用相同的存储空间,具有相同的性能。
mysql> create table t1(ida int,idb int(5));
Query OK, 0 rows affected, 1 warning (0.07 sec)
mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| ida | int(11) | YES | | NULL | | //不指定宽度,默认为int(11)
| idb | int(5) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> insert into t1 values(1,1);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t1;
+------+------+
| ida | idb |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)
mysql> alter table t1 modify ida int zerofill; //加入zerofill参数
Query OK, 1 row affected, 1 warning (0.09 sec)
Records: 1 Duplicates: 0 Warnings: 1
mysql> alter table t1 modify idb int(5) zerofill;
Query OK, 1 row affected, 2 warnings (0.09 sec)
Records: 1 Duplicates: 0 Warnings: 2
mysql> select * from t1;
+------------+-------+
| ida | idb |
+------------+-------+
| 0000000001 | 00001 |
+------------+-------+
1 row in set (0.00 sec)
2、实数类型
对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float和double,定点数为decimal,定点数在MySQL中以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。MySQL内部使用double作为浮点计算的类型,decimal是一种存储格式,在计算中会转换为double。
我们可以使用 “数据类型(整数位,小数位)” 的方式指定浮点列所需要的精度,但这会导致MySQL在存储时对值进行取舍,如下所示。所以我们尽量只指定数据类型,而不指定精度。
mysql> create table t2(id1 float(5,2),
-> id2 double,
-> id3 decimal);
Query OK, 0 rows affected, 1 warning (0.06 sec)
mysql> desc t2;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id1 | float(5,2) | YES | | NULL | |
| id2 | double | YES | | NULL | |
| id3 | decimal(10,0) | YES | | NULL | | //不指定精度时默认为decimal(10,0)
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> insert into t2 values(1.233,1.233,1.233);
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> show warnings; //decimal数据超越精度值会报错
+-------+------+------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------+
| Note | 1265 | Data truncated for column 'id3' at row 1 |
+-------+------+------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from t2;
+------+-------+------+
| id1 | id2 | id3 |
+------+-------+------+
| 1.23 | 1.233 | 1 |
+------+-------+------+ //float只保存了1.23,decimal列也被截断
1 row in set (0.00 sec)
3、字符串类型
(1)char和varchar
这是两种最主要的字符串类型。
以下演示环境为MySQL8.0.17
mysql> desc t3;
+---