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轉(zhuǎn)PostgreSQL注意事項及說明
這篇文章主要介紹了Mysql轉(zhuǎn)PostgreSQL注意事項及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-10-10linux使用mysqldump+expect+crontab實現(xiàn)mysql周期冷備份思路詳解
這篇文章主要介紹了linux使用mysqldump+expect+crontab實現(xiàn)mysql周期冷備份,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10MySQL數(shù)據(jù)庫定時備份的幾種實現(xiàn)方法
本文主要介紹了MySQL數(shù)據(jù)庫定時備份的幾種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07Python3.6-MySql中插入文件路徑,丟失反斜杠的解決方法
下面小編就為大家?guī)硪黄狿ython3.6-MySql中插入文件路徑,丟失反斜杠的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06Mysql8報錯this is incompatible with sql_mo
這篇文章主要介紹了Mysql8報錯this is incompatible with sql_mode=only_full_group_by問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01MySQL 實現(xiàn)lastInfdexOf的功能案例
這篇文章主要介紹了MySQL 實現(xiàn)lastInfdexOf的功能案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12