MYSQL对于整型的划分应该说是最细致的,总共分了5档,由小到大分别是:TINYINT 、 SMALLINT 、MEDIAINT 、INT 、 BIGINT。BOOL类型和BIT类型也可以看做TINYINT(1),但此处还是暂时忽略不计。因为之前习惯了Oracle中一个number就搞定所有数值的方式,所以最初这超细粒度的类型划分还是给我带来了不小的困惑。
TINYINT[(M)][UNSIGNED][ZEROFILL]
一个微小整数。-128–127(SIGNED);0–255(UNSIGNED),需要一个字节的存储。
SMALLINT[(M)][UNSIGNED][ZEROFILL]
一个小整数。从 -2^15 (-32768) 到 2^15 – 1 (32767) 的整型数据。存储大小为 2 个字节。
MEDIAINT[(M)][UNSIGNED][ZEROFILL]
一个中等整数。从 -2^23 (8388608) 到 2^23 – 1 (8388607) 的整型数据。存储大小为 3 个字节。
INT[(M)][UNSIGNED][ZEROFILL]
从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
BIGINT[(M)][UNSIGNED][ZEROFILL]
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
说明:
M的含义:
M indicates the maximum display width for integer types. The maximum legal display width is 255. Display width is unrelated to the range of values a type can contain.
示例1:
mysql> CREATE TABLE test1(id TINYINT(1));
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO test1 VALUES(123);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test1;
+——+
| id |
+——+
| 123 |
+——+
1 row in set (0.00 sec)
从上面示例中可以看出,M并没有限制可以插入的数值。
示例2:
mysql> CREATE TABLE test2(id TINYINT(3) ZEROFILL) ;
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO test2 VALUES(1);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test2;
+——+
| id |
+——+
| 001 |
+——+
1 row in set (0.00 sec)
从上面示例中可以看出,M需要和ZEROFILL配合使用才能发挥作用,用来控制整数数值的显示位数。如果实际数值位数小于所设置的M值,则从左补 0 。
UNSIGNED的含义
表示该字段不允许存储负值。
ZEROFILL的含义
为该值补0,而不是常用的空格,并且将其自动变为 UNSIGNED 。
Sorry, the comment form is closed at this time.
No comments yet.