发表于: lnmp | 作者: | 日期: 2010/1/19 05:01

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 。

: https://blog.darkmi.com/2010/01/19/1047.html

本文相关评论 - 1条评论都没有呢
Post a comment now » 本文目前不可评论

No comments yet.

Sorry, the comment form is closed at this time.