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