1. 程式人生 > >mysql int(m)與int(m)的差別

mysql int(m)與int(m)的差別

data bool adding lec 數據庫 lean 沒有 art same

預計大多數開始接觸mysql的朋友們都會有這個問題:int(M) 裏面的數值究竟是什麽意思?


依據相關資料總結了下:

int(M) zerofill,加上zerofillM才表現出有點點效果,比方 int(3) zerofill,你插入到數據庫裏的是10,則實際插入為010,也就是在前面補充加了一個0.假設int(3)int(10)不加zerofill,則它們沒有什麽差別.M不是用來限制int個數的.int(M)的最大值和最小值與undesigned有關,最以下那副圖有說明.

mysql> create table table_one (t int(3) zerofill);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into table_one

set t = 8;
Query OK, 1 row affected (0.00 sec)

mysql> select * from table_one ;
+——+
| t |
+——+
| 008 |
+——+
1 row in set (0.11 sec)

Zerofill with default width, the same as int(10):

mysql> create table table_two (t int zerofill);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into table_two
set t = 10;
Query OK, 1 row affected (0.02 sec)

mysql> select * from t;
+————+
| t |
+————+
| 0000000010 |
+————+
1 row in set (0.08 sec)

Without zerofill:

mysql> create table table_3 (t int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into table_3 set t = 10;
Query OK, 1 row affected (0.01 sec)

mysql> select * from t;
+——+
| t |
+——+
| 10 |
+——+

1 row in set (0.00 sec)


1 bytes = 8 bit ,一個字節最多能夠代表的數據長度是2的8次方 11111111 在計算機中也就是

-128到127

1.BIT[M]

位字段類型。M表示每一個值的位數。範圍從1到64,假設M被忽略。默覺得1

2.TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默覺得4

非常小的整數。帶符號的範圍是-128127。無符號的範圍是0255

3. BOOLBOOLEAN

TINYINT(1)的同義詞。

zero值被視為假。非zero值視為真。

4.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默覺得6

小的整數。帶符號的範圍是-3276832767

無符號的範圍是065535

5.MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默覺得9

中等大小的整數。帶符號的範圍是-83886088388607

無符號的範圍是016777215

6. INT[(M)] [UNSIGNED] [ZEROFILL] M默覺得11

普通大小的整數。帶符號的範圍是-21474836482147483647。無符號的範圍是04294967295

7.BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默覺得20

大整數。帶符號的範圍是-92233720368547758089223372036854775807。無符號的範圍是018446744073709551615

*:這裏的M代表的並非存儲在數據庫中存儲的詳細的長度

事實上當我們在選擇使用int的類型的時候,不論是int(3)還是int(11)。它在數據庫裏面存儲的都是4個字節的長度。在使用int(3)的時候假設你輸入的是10。會默認給你存儲位010,也就是說這個3代表的是默認的一個長度,當你不足3位時,會幫你不全,當你超過3位時,就沒有不論什麽的影響。

前天組管問我 int(10)與int(11)有什麽差別。當時認為就是長度的差別吧,如今看,他們之間除了在存儲的時候略微有點差別外。在我們使用的時候是沒有不論什麽差別的。int(10)也能夠代表2147483647這個值int(11)也能夠代表。


我們通常在創建數據庫的時候都不會增加這個選項,所以能夠說他們之間是沒有差別的。

mysql int(m)與int(m)的差別