MySQL int(11)及int(M)解析
預設建立int型別的欄位,SHOW CREATE TABLE table_name或DESC table_name常常可以看到其預設情況為int(11)。
這個int(M)很多時候都會被誤解為最大範圍,但是並不是這樣的,int的範圍是早已已經被指定好了的,並且無符號int的最大上限值為2^32-1。
做個實驗:
可以很輕易的看出這樣寫是沒有任何問題的。
那麼int(M)是幹什麼用的呢?
其實在建立int型別的欄位時,可以新增一個ZEROFILL的值。
當然該約束可以用於不僅僅是int的整型資料,還可以用於其他的四種型別的整型資料。(此處拿int做例子)
ZEROFILL的作用是,根據整型資料型別提供的寬度,自動補零。
比如:
此時可以很輕易的看出,在int(10)的情況下,在插入不足10位寬度的數字時,都會在數字前補0至10位寬度。
還可以看到,在新增了ZEROFILL之後,int的預設寬度由預設的11改為了10。
網上有部分結論與我所理解的有一部分不一樣,不知與版本是否有關,此處版本:
關於整型資料型別範圍值可參考
http://blog.itpub.net/29773961/viewspace-1803302/
作者公眾號(持續更新)
![](https://i.iter01.com/images/8f64a2b35e042aa26bed92b6fe0bf52d0c1b1fb4b6858c961216c0fad8bc5310.png)
這個int(M)很多時候都會被誤解為最大範圍,但是並不是這樣的,int的範圍是早已已經被指定好了的,並且無符號int的最大上限值為2^32-1。
做個實驗:
-
mysql> CREATE TABLE a(id int(2));
-
Query OK, 0 rows affected (0.39 sec)
-
-
mysql> INSERT INTO a SELECT 3333;
-
Query OK, 1 row affected (0.03 sec)
-
Records: 1 Duplicates: 0 Warnings: 0
-
-
mysql> DESC a;
-
+-------+--------+------+-----+---------+-------+
-
| Field | Type | Null | Key | Default | Extra |
-
+-------+--------+------+-----+---------+-------+
-
| id | int(2) | YES | | NULL | |
-
+-------+--------+------+-----+---------+-------+
-
1 row in set (0.00 sec)
-
-
mysql> SELECT * FROM a;
-
+------+
-
| id |
-
+------+
-
| 3333 |
-
+------+
- 1 row in set (0.00 sec)
可以很輕易的看出這樣寫是沒有任何問題的。
那麼int(M)是幹什麼用的呢?
其實在建立int型別的欄位時,可以新增一個ZEROFILL的值。
當然該約束可以用於不僅僅是int的整型資料,還可以用於其他的四種型別的整型資料。(此處拿int做例子)
ZEROFILL的作用是,根據整型資料型別提供的寬度,自動補零。
比如:
-
mysql> CREATE TABLE b(id int ZEROFILL);
-
Query OK, 0 rows affected (0.28 sec)
-
-
mysql> DESC b;
-
+-------+---------------------------+------+-----+---------+-------+
-
| Field | Type | Null | Key | Default | Extra |
-
+-------+---------------------------+------+-----+---------+-------+
-
| id | int(10) unsigned zerofill | YES | | NULL | |
-
+-------+---------------------------+------+-----+---------+-------+
-
1 row in set (0.00 sec)
-
-
mysql> INSERT INTO b SELECT 22;
-
Query OK, 1 row affected (0.04 sec)
-
Records: 1 Duplicates: 0 Warnings: 0
-
-
mysql> INSERT INTO b SELECT 123456789;
-
Query OK, 1 row affected (0.04 sec)
-
Records: 1 Duplicates: 0 Warnings: 0
-
-
mysql> SELECT * FROM b;
-
+------------+
-
| id |
-
+------------+
-
| 0000000022 |
-
| 0123456789 |
-
+------------+
- 2 rows in set (0.00 sec)
還可以看到,在新增了ZEROFILL之後,int的預設寬度由預設的11改為了10。
網上有部分結論與我所理解的有一部分不一樣,不知與版本是否有關,此處版本:
-
mysql> SELECT version();
-
+-----------+
-
| version() |
-
+-----------+
-
| 5.6.26 |
-
+-----------+
- 1 row in set (0.00 sec)
關於整型資料型別範圍值可參考
http://blog.itpub.net/29773961/viewspace-1803302/
作者公眾號(持續更新)
![](https://i.iter01.com/images/8f64a2b35e042aa26bed92b6fe0bf52d0c1b1fb4b6858c961216c0fad8bc5310.png)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1804920/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 中 int (10) 和 int (11) 到底有什麼區別?MySql
- #define int Modint<11>
- TKMySQL中int?(10)?和?int?(11)?的區別zceMySql
- int[] 、 list<int> 、 list<int>[] 的區別
- C語言之int *f()、int(*f)()、int *a[]、int (*a)[] 區別小記C語言
- mysql int(3)與int(10)的數值範圍相同嗎?MySql
- 素數判定(int sushu(int n))
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- Int -> List | List -> Int _ CodingPark程式設計公園程式設計
- MySQL中int、char、varchar的效能淺談MySql
- MySQL 修改int型別為bigint SQL語句拼接MySql型別
- 巧用python“int”函式Python函式
- char轉換成int
- python ascii int互換PythonASCII
- INT型別知多少型別
- 翻轉int陣列陣列
- Activity 中的方法 findViewById(int) 和 AppCompatActivity 中的方法 findViewById(int) 都匹配...ViewAPP
- C# modbus RTU 中使用到的 ushort[] 轉 int 與 int 轉 ushort[]C#
- Mysql時間欄位格式如何選擇,TIMESTAMP,DATETIME,INT?MySql
- MySQL int型別長度的意義是什麼MySql型別
- Go 語言 big.IntGo
- BIOS INT 10中斷功能iOS
- int和Integer的區別
- C++中vector<int>& numsC++
- int存放到void指標指標
- Integer轉int出現NullPointExceptionNullException
- int與Integer的區別
- int/double資料範圍
- python的int怎麼用Python
- C語言 關鍵字const的作用 const int* 和int *const 的區別C語言
- mysql innodb 主鍵INT、BIGINT、VARCHAR併發插入效能對比MySql
- 型別轉換(int 和 String)型別
- abs(int)、fabs(double)函式用法函式
- Ajax接收int型別亂碼型別
- INT2067 Introduction to Programming and Problem Solving
- int 被當作模糊查詢
- __int128:懶人的福音
- Kotlin建立二維Int陣列Kotlin陣列
- [轉載] 詳解 MySQL int 型別的長度值問題MySql型別