Mysql中int(1)、int(20)的區(qū)別小結(jié)
在設(shè)計數(shù)據(jù)庫表的時候,經(jīng)常需要設(shè)計一個id字段,它的類型一般都是整型int,經(jīng)常會遇到int(1)、int(20)等。
int的范圍:
有符號的整型范圍是-2147483648~2147483647
無符號的整型范圍是0~4294967295
參看 MySQL 手冊,int(M): M indicates the maximum display width for integer types.
int(M)只是用來顯示數(shù)據(jù)的寬度,在 integer 數(shù)據(jù)類型中,M 表示最大顯示寬度,一般int后面的數(shù)字M要配合zerofill一起使用才有效。
數(shù)據(jù)準(zhǔn)備
創(chuàng)建測試表 test_table,包含兩個測試字段area_1 int(1)、area_2 int(20):
CREATE TABLE `test_table` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `area_1` int(1) unsigned DEFAULT NULL, `area_2` int(20) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
存儲大小
在 MySQL 中 int 類型占4個字節(jié),對于無符號整形最大值為:2^32-1 = 4294967295,下面看看int(1)、int(20)分別可以存儲 int 類型最大值?
INSERT INTO `test_table` (`area_1`, `area_2`) VALUES (4294967295, 4294967295) > Affected rows: 1 > 查詢時間: 0.002s
插入成功,int(1)、int(20) 都可以存儲 int 類型最大值,說明對存儲大小無影響。那么1和20用什么作用呢?答案就是對齊填充,當(dāng)聯(lián)合零填充(zerofill) 使用時,配置的值才會體現(xiàn)效果。
零填充(zerofill,一般int后面的數(shù)字要配合zerofill一起使用才有效)
所謂零填充就是當(dāng)數(shù)字位小于指定位數(shù)時,使用0填充補(bǔ)全位數(shù),比如指定位數(shù)為4位,數(shù)為23,那么實際會被填充為 0023。
將 area_1 和 area_2 字段配置為 zerofill:
CREATE TABLE `test_table` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `area_1` int(1) unsigned <strong>zerofill</strong> DEFAULT NULL, `area_2` int(20) unsigned <strong>zerofill</strong> DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

可以看到 area_2 不足20位時使用0補(bǔ)齊到20位,area_1 指定位數(shù)為 1 位實際并沒有效果,因為數(shù)字至少為1位,對 NULL 不生效。
零填充(zerofill)在一些需要數(shù)字對齊的場景中可能使用,但實踐中并不推薦,對數(shù)據(jù)庫依賴性太強(qiáng)。
總結(jié)
int后面的數(shù)字不能表示字段的長度,int(num)一般加上zerofill,才有效果。
一般整型而言,對于int(1)、int(20) 中指定的位數(shù)并不會影響字段的存儲大小,而是和零填充(zerofill)聯(lián)合使用實現(xiàn)對齊填充,實際使用中沒有特殊對齊需求,配置為int(1)即可。
注意:零填充只針對于整型,字符串(char、varchar)的“長度”是會受到真正的限制。Char(n)、Varchar(n),括號里的N表示的是該字段可容納的最大字符數(shù),簡單來說就是能存入多少個字符,n的取值范圍為:0-255。
到此這篇關(guān)于Mysql中int(1)、int(20)的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)Mysql int(1) int(20)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL分表自動化創(chuàng)建的實現(xiàn)方案
在數(shù)據(jù)庫應(yīng)用場景中,隨著數(shù)據(jù)量的不斷增長,單表存儲數(shù)據(jù)可能會面臨性能瓶頸,例如查詢、插入、更新等操作的效率會逐漸降低,分表是一種有效的優(yōu)化策略,它將數(shù)據(jù)分散存儲在多個表中,從而提高數(shù)據(jù)庫的性能和可維護(hù)性,本文介紹了MySQL分表自動化創(chuàng)建的實現(xiàn)方案2025-01-01
Ubuntu20下MySQL?8.0.28?安裝卸載方法圖文教程
這篇文章主要為大家詳細(xì)介紹了Ubuntu20下MySQL?8.0.28?安裝卸載方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
關(guān)于MySQL的體系結(jié)構(gòu)及存儲引擎圖解
這篇文章主要介紹了關(guān)于MySQL的體系結(jié)構(gòu)及存儲引擎圖解,MySQL整體的邏輯結(jié)構(gòu)可以分為4層,客戶層、服務(wù)層、存儲引擎層、數(shù)據(jù)層,需要的朋友可以參考下2023-05-05

