Mysql中int(1)、int(20)的區(qū)別小結(jié)
在設(shè)計(jì)數(shù)據(jù)庫(kù)表的時(shí)候,經(jīng)常需要設(shè)計(jì)一個(gè)id字段,它的類型一般都是整型int,經(jīng)常會(huì)遇到int(1)、int(20)等。
int的范圍:
有符號(hào)的整型范圍是-2147483648~2147483647
無(wú)符號(hào)的整型范圍是0~4294967295
參看 MySQL 手冊(cè),int(M): M indicates the maximum display width for integer types.
int(M)只是用來(lái)顯示數(shù)據(jù)的寬度,在 integer 數(shù)據(jù)類型中,M 表示最大顯示寬度,一般int后面的數(shù)字M要配合zerofill一起使用才有效。
數(shù)據(jù)準(zhǔn)備
創(chuàng)建測(cè)試表 test_table,包含兩個(gè)測(cè)試字段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;
存儲(chǔ)大小
在 MySQL 中 int 類型占4個(gè)字節(jié),對(duì)于無(wú)符號(hào)整形最大值為:2^32-1 = 4294967295,下面看看int(1)、int(20)分別可以存儲(chǔ) int 類型最大值?
INSERT INTO `test_table` (`area_1`, `area_2`) VALUES (4294967295, 4294967295) > Affected rows: 1 > 查詢時(shí)間: 0.002s
插入成功,int(1)、int(20) 都可以存儲(chǔ) int 類型最大值,說(shuō)明對(duì)存儲(chǔ)大小無(wú)影響。那么1和20用什么作用呢?答案就是對(duì)齊填充,當(dāng)聯(lián)合零填充(zerofill) 使用時(shí),配置的值才會(huì)體現(xiàn)效果。
零填充(zerofill,一般int后面的數(shù)字要配合zerofill一起使用才有效)
所謂零填充就是當(dāng)數(shù)字位小于指定位數(shù)時(shí),使用0填充補(bǔ)全位數(shù),比如指定位數(shù)為4位,數(shù)為23,那么實(shí)際會(huì)被填充為 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位時(shí)使用0補(bǔ)齊到20位,area_1 指定位數(shù)為 1 位實(shí)際并沒(méi)有效果,因?yàn)閿?shù)字至少為1位,對(duì) NULL 不生效。
零填充(zerofill)在一些需要數(shù)字對(duì)齊的場(chǎng)景中可能使用,但實(shí)踐中并不推薦,對(duì)數(shù)據(jù)庫(kù)依賴性太強(qiáng)。
總結(jié)
int后面的數(shù)字不能表示字段的長(zhǎng)度,int(num)一般加上zerofill,才有效果。
一般整型而言,對(duì)于int(1)、int(20) 中指定的位數(shù)并不會(huì)影響字段的存儲(chǔ)大小,而是和零填充(zerofill)聯(lián)合使用實(shí)現(xiàn)對(duì)齊填充,實(shí)際使用中沒(méi)有特殊對(duì)齊需求,配置為int(1)即可。
注意:零填充只針對(duì)于整型,字符串(char、varchar)的“長(zhǎng)度”是會(huì)受到真正的限制。Char(n)、Varchar(n),括號(hào)里的N表示的是該字段可容納的最大字符數(shù),簡(jiǎn)單來(lái)說(shuō)就是能存入多少個(gè)字符,n的取值范圍為:0-255。
到此這篇關(guān)于Mysql中int(1)、int(20)的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)Mysql int(1) int(20)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql轉(zhuǎn)PostgreSQL注意事項(xiàng)及說(shuō)明
這篇文章主要介紹了Mysql轉(zhuǎn)PostgreSQL注意事項(xiàng)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-10-10linux使用mysqldump+expect+crontab實(shí)現(xiàn)mysql周期冷備份思路詳解
這篇文章主要介紹了linux使用mysqldump+expect+crontab實(shí)現(xiàn)mysql周期冷備份,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10MySQL數(shù)據(jù)庫(kù)定時(shí)備份的幾種實(shí)現(xiàn)方法
本文主要介紹了MySQL數(shù)據(jù)庫(kù)定時(shí)備份的幾種實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07Python3.6-MySql中插入文件路徑,丟失反斜杠的解決方法
下面小編就為大家?guī)?lái)一篇Python3.6-MySql中插入文件路徑,丟失反斜杠的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Mysql8報(bào)錯(cuò)this is incompatible with sql_mo
這篇文章主要介紹了Mysql8報(bào)錯(cuò)this is incompatible with sql_mode=only_full_group_by問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01MySQL 實(shí)現(xiàn)lastInfdexOf的功能案例
這篇文章主要介紹了MySQL 實(shí)現(xiàn)lastInfdexOf的功能案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12銀河麒麟V10安裝MySQL5.7的詳細(xì)過(guò)程
這篇文章主要介紹了銀河麒麟V10安裝MySQL5.7,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05