val什么意思vb中的属性值_老司机带你探索Mysql中int(1)、int(10)、int(11)的区别是什么?...
在上一篇原創(chuàng)文章MySQL一個(gè)表的自增id用完了,背井大佬讓我用這些姿勢(shì)再往里插數(shù)據(jù),最后留下了一個(gè)問(wèn)題,大家知不知道int(1)和int(11)有什么區(qū)別,沒(méi)有小伙伴互動(dòng)回答,只有一位老哥讓我說(shuō)一下什么區(qū)別,我說(shuō)上周安排,這不就打臉了,如果這位老哥能看到的話,說(shuō)聲抱歉,然后今天特地用這篇文章來(lái)回答這個(gè)問(wèn)題。我相信一定會(huì)對(duì)有些小伙伴有所幫助。看過(guò)上篇文章你一定知道了字段后面的unsigned是什么意思,其實(shí)就是很簡(jiǎn)單的基礎(chǔ),但是我見(jiàn)過(guò)有很多5年以上的開(kāi)發(fā)人員不知道unsigned作用是什么。包括今天要講的zerofill,不知道的人就更多了,我們太習(xí)慣舒適了,我們總是自嘲自己是CRUD程序員,可這種自嘲更多的是群嗨,有幾個(gè)真正戳痛過(guò)自己。好了,點(diǎn)到為止,只是希望我們不要停止學(xué)習(xí),不要埋葬探索的欲望。回到正題,你在建字段id時(shí),選擇了int類(lèi)型之后,后面的長(zhǎng)度你習(xí)慣性的填上10或者11,你又建了一個(gè)type字段,選擇了int之后,你又習(xí)慣性的在長(zhǎng)度上填了1,很佩服大家如此的統(tǒng)一有默契。問(wèn)其緣由,id自增長(zhǎng)啊,肯定要長(zhǎng)度長(zhǎng)一點(diǎn)了,type一般就幾個(gè)意思,長(zhǎng)度為1就夠了,我想如果tinyint會(huì)說(shuō)話的話,一定會(huì)跳起來(lái)打你膝蓋,咋地,質(zhì)問(wèn)你是看不起它還是咋地?我不知道現(xiàn)在怎樣,以前這種思想夸張點(diǎn)說(shuō)真的是普遍現(xiàn)象,所有人都這么干,那么你真的用對(duì)了嗎?下面,我們一起來(lái)揭開(kāi)int(1)、int(10)、int(11)它們一點(diǎn)兒也不神秘的面紗。
1、我們先隨便建一張表,定義幾個(gè)字段,如下圖所示:
DROP TABLE IF EXISTS mzc;CREATE TABLE `mzc` (`id` int(1) unsigned zerofill NOT NULL AUTO_INCREMENT,`seq` int(1) DEFAULT NULL,`val` int(3) DEFAULT NULL,`num` int(10) unsigned DEFAULT NULL,`sort` int(10) unsigned zerofill DEFAULT NULL,`no` int(11) unsigned zerofill DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;2、眼尖的小伙伴應(yīng)該也發(fā)現(xiàn)了這些字段都是int類(lèi)型,只不過(guò)后面跟著不同的屬性修飾,上一篇unsigned我就不啰嗦了,這次有的int后面多了個(gè)zerofill,就是下圖復(fù)選框打鉤的填充零,這是什么意思呢?
image
3、別著急,我們向表里插一條數(shù)據(jù)。
INSERT INTO `mzc`(`id`, `seq`, `val`, `num`, `sort`, `no`) VALUES (1, -12, 4567, 1, 1, 1);4、你們猜,執(zhí)行select * 之后是什么樣?
SELECT * FROM mzc;5、別走神,高潮要來(lái)了,我們來(lái)一探到底。
image
咦、sort和no的值怎么前面填充了那么多0,我的天吶,這么神奇的嗎?是不是和有些小伙伴想的不一樣?
6、別泄氣,再堅(jiān)持一下,就用你們?cè)O(shè)想的姿勢(shì),我們給num插一個(gè)長(zhǎng)度為10的值,就10個(gè)9吧,夠大了吧?
INSERT INTO `mzc`(`id`, `seq`, `val`, `num`, `sort`, `no`) VALUES (2, -12, 4567, 9999999999, 1, 1);你們猜怎么著,mysql說(shuō)我耍流氓,說(shuō)我太大了,超過(guò)它的承受范圍了,終究是一個(gè)人扛下了所有。
image.png
int(10)尚且如此,那有的小伙伴想插入長(zhǎng)度11位的值該怎么辦,我想還是死了這條心吧,下車(chē)?yán)潇o冷靜,是時(shí)候真正了解int(1)、int(10)、int(11)了。
我們來(lái)看一下Mysql手冊(cè)上是怎么介紹的:
int(M): M indicates the maximum display width for integer types.1
這句話的意思就是:在 integer 數(shù)據(jù)類(lèi)型中,M 表示最大顯示寬度。
也就是說(shuō):
- int(M)中,M的值與int(M)所占多少存儲(chǔ)空間沒(méi)有任何關(guān)系,int(1)、int(10)、int(11) 在磁盤(pán)上都是占用 4 btyes 的存儲(chǔ)空間。****
- 與int類(lèi)型的字段能存儲(chǔ)的數(shù)據(jù)最大最小值也沒(méi)有任何關(guān)系,int類(lèi)型的字段能存儲(chǔ)的數(shù)據(jù)上限還是2147483647(有符號(hào)型)和4294967295(無(wú)符號(hào)型)。
這張圖再發(fā)一遍,希望可以加深大家的印象。
image
回到我們第一次insert時(shí)候查詢結(jié)果的截圖:
image
可以發(fā)現(xiàn),int(10)與int(11)后的括號(hào)中的字符表示顯示寬度,用于顯示寬度小于指定的列寬度的值時(shí)從左側(cè)填滿寬度,比如我們定義了int(10),插入1,在1左側(cè)補(bǔ)充9個(gè)0,最后顯示0000000001,int(11)同理。如果顯示寬度大于指定列寬就正常顯示,如果int(3),插入1,會(huì)顯示001,插入了4567,還是顯示4567。
總結(jié)
- int(1)、int(10)和int(11)本身是沒(méi)有任何區(qū)別的,只有使用了zerofill之后,才會(huì)有顯示寬度上的區(qū)別。
- 聲明整型數(shù)據(jù)列時(shí),我們可以為它指定顯示寬度M(1~255),理論最大顯示寬度為255。
- 如果為一個(gè)數(shù)值列指定ZEROFILL,MySQL自動(dòng)為該列添加UNSIGNED屬性。
上次留言的那位老哥,不知你有沒(méi)有看到這篇文章,雖遲但到,希望沒(méi)有辜負(fù)你的信任。如果這篇文章能幫一些小伙伴掃盲,那也算是幸事一件了,希望可以幫忙轉(zhuǎn)發(fā)、在看,給點(diǎn)鼓勵(lì)和支持!謝謝!
最后,因?yàn)槲闹虚_(kāi)了點(diǎn)車(chē),所以特地發(fā)另一篇文章,幫大家洗洗眼,感興趣的話可以去第二篇文章讀一讀,句子很短,卻充滿故事和想象。
總結(jié)
以上是生活随笔為你收集整理的val什么意思vb中的属性值_老司机带你探索Mysql中int(1)、int(10)、int(11)的区别是什么?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 10-制表符,响铃
- 下一篇: 修改结构体中成员的值