mysql中int(3)和int(10)的數值范圍是否相同

提問:

mysql的字段,unsigned int(3), 和unsinged int(6), 能存儲的數值范圍是否相同。如果不同,分別是多大?

回答:

不同,int(3)最多顯示3位無符號整體,int(6)最多顯示6位無符號數。

如果你的答案和上面的一致,恭喜你和我犯瞭一樣的錯誤。

真實情況:

int類型整數占4個字節,有符號的范圍為:-2^31 ~ 2^31-1,無符號整數范圍為:0 ~ 2^32-1,既然都是無符號整數,那麼存儲范圍是一樣的,int(6)隻是在數字不夠6位時用0補全,如果超過6位,則不需要補全。

我們建立下面這張表:

drop table if exists test;
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` int(11) NOT NULL,
  `b` int(11) unsigned zerofill NOT NULL,
  `c` int(5) DEFAULT NULL,
  `d` int(5) unsigned zerofill NOT NULL,
  `e` int(15) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入一些數據後,用cmd命令行查看:

mysql> select * from test;
+----+------------+-------------+------------+------------+------------+
| id | a          | b           | c          | d          | e          |
+----+------------+-------------+------------+------------+------------+
|  1 |          1 | 00000000001 |          1 |      00001 |          1 |
|  2 | 1234567890 | 01234567890 | 1234567890 | 1234567890 | 1234567890 |
+----+------------+-------------+------------+------------+------------+

發現,無論是int(3), int(6), 都可以顯示6位以上的整數。但是,當數字不足3位或6位時,前面會用0補齊。

註意:如果你是用類似navicat這種工具看,不會補充0,可能做瞭處理,需要用mysql cmd命令行才能看到這種效果。

查下手冊,解釋是這樣的:

MySQL還支持選擇在該類型關鍵字後面的括號內指定整數值的顯示寬度(例如,INT(4))。該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。顯示寬度並不限制可以在列內保存的值的范圍,也不限制超過列的指定寬度的值的顯示。

也就是說,int的長度並不影響數據的存儲精度,長度隻和顯示有關,為瞭讓大傢看的更清楚,我們在上面例子的建表語句中,使用瞭zerofill。

知識點

int(M) 中的M指示最大顯示寬度,最大有效顯示寬度是 255,且顯示寬度與存儲大小或類型包含的值的范圍無關。

首先說一下 MySQL 的數值類型,MySQL 支持所有標準 SQL 數值數據類型。這些類型包括嚴格數值數據類型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似數值數據類型(FLOAT、REAL 和 DOUBLE PRECISION)。關鍵字 INT 是 INTEGER 的同義詞,關鍵字 DEC 是DECIMAL 的同義詞。

BIT 數據類型保存位字段值,並且支持 MyISAM、MEMORY、InnoDB 和 BDB表。 作為 SQL 標準的擴展,MySQL 也支持整數類型TINYINT、MEDIUMINT 和 BIGINT。下面的表顯示瞭需要的每個整數類型的存儲和范圍。

結論:

無論是unsigned int(3)或 unsiend int(6),存儲的都是4字節無符號整數, 也就是0~2^32。

總結

到此這篇關於mysql中int(3)和int(10)的數值范圍是否相同的文章就介紹到這瞭,更多相關mysql int(3)和int(10)數值范圍內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: