关于mysql中int(1)中int后面的数字
生活随笔
收集整理的這篇文章主要介紹了
关于mysql中int(1)中int后面的数字
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
mysql在建表的時(shí)候int類型后的長(zhǎng)度代表什么? 是該列允許存儲(chǔ)值的最大寬度嗎? 為什么我設(shè)置成int(1), 也一樣能存10,100,1000呢.
? 當(dāng)時(shí)我雖然知道int(1),這個(gè)長(zhǎng)度1并不代表允許存儲(chǔ)的寬度,但卻沒有一個(gè)合理的解釋. 或者說對(duì)這個(gè)長(zhǎng)度也沒有真正的研究過到底代表什么, 平時(shí)都用int(11), 也不知道為什么要11位. 所以我在網(wǎng)上查閱了一些資料, 也仔細(xì)的看了mysql手冊(cè)關(guān)于int data type的說法. 以下是每個(gè)整數(shù)類型的存儲(chǔ)和范圍(來自mysql手冊(cè))
?
? 那么根據(jù)int類型允許存儲(chǔ)的字節(jié)數(shù)是4個(gè)字節(jié), 我們就能換算出int?UNSIGNED(無符號(hào))類型的能存儲(chǔ)的最小值為0, 最大值為4294967295(即4B=32b, 最大值即為32個(gè)1組成); 接下來我們?cè)僬f說我們建表時(shí)的字段長(zhǎng)度到底是怎么一回事. CREATE TABLE `test` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`number` INT( 5 ) NOT NULL
) ENGINE = MYISAM ; 以test表的number字段為例, 大家看到我建的是int(5)
mysql手冊(cè)中這個(gè)長(zhǎng)度/值用"M"來表示的. 細(xì)心的朋友應(yīng)該有注意到過mysql手冊(cè)上有這么一句話:??M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與存儲(chǔ)大小或類型包含的值的范圍無關(guān); 這句話看上去不太容易理解, 因?yàn)檫@里有個(gè)關(guān)鍵詞容易讓我們混淆, "最大顯示寬度"我們第一反應(yīng)是該字段的值最大能允許存放的值的寬度. 以為我們建了int(1),就不能存放數(shù)據(jù)10了, 其實(shí)不是這個(gè)意思. 這個(gè)M=5我們可以簡(jiǎn)單的理解成為, 我們建立這個(gè)長(zhǎng)度是為了告訴MYSQL數(shù)據(jù)庫我們這個(gè)字段的存儲(chǔ)的數(shù)據(jù)的寬度為5位數(shù),? 當(dāng)然如果你不是5位數(shù)(只要在該類型的存儲(chǔ)范圍之內(nèi))MYSQL也能正常存儲(chǔ),? 這也就能解釋以上標(biāo)紅的話. 我們把這個(gè)字段的"屬性"修改為UNSIGNED ZEROFILL看一下效果.
? 當(dāng)時(shí)我雖然知道int(1),這個(gè)長(zhǎng)度1并不代表允許存儲(chǔ)的寬度,但卻沒有一個(gè)合理的解釋. 或者說對(duì)這個(gè)長(zhǎng)度也沒有真正的研究過到底代表什么, 平時(shí)都用int(11), 也不知道為什么要11位. 所以我在網(wǎng)上查閱了一些資料, 也仔細(xì)的看了mysql手冊(cè)關(guān)于int data type的說法. 以下是每個(gè)整數(shù)類型的存儲(chǔ)和范圍(來自mysql手冊(cè))
?
| 類型 | 字節(jié) | 最小值 | 最大值 |
| (帶符號(hào)的/無符號(hào)的) | (帶符號(hào)的/無符號(hào)的) | ||
| TINYINT | 1 | -128 | 127 |
| 0 | 255 | ||
| SMALLINT | 2 | -32768 | 32767 |
| 0 | 65535 | ||
| MEDIUMINT | 3 | -8388608 | 8388607 |
| 0 | 16777215 | ||
| INT | 4 | -2147483648 | 2147483647 |
| 0 | 4294967295 | ||
| BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
| 0 | 18446744073709551615 |
?
表格一共有四列分別表式:字段類型, 占用字節(jié)數(shù), 允許存儲(chǔ)的最小值, 允許存儲(chǔ)的最大值. 我們拿int類型為例: int類型, 占用字節(jié)數(shù)為4byte, 學(xué)過計(jì)算機(jī)原理的同學(xué)應(yīng)該知道, 字節(jié)(byte)并非是計(jì)算機(jī)存儲(chǔ)的最小單位, 還有比字節(jié)(byte)更小的單位, 也就是位(bit),一個(gè)位就代表一個(gè)0或1; 8個(gè)位組成一個(gè)字節(jié); 一般字節(jié)用大寫B(tài)來表示byte, 位用小寫b來表示bit. 計(jì)算機(jī)存儲(chǔ)單位的換算: 1B=8b 1KB=1024B 1MB=1024KB? 那么根據(jù)int類型允許存儲(chǔ)的字節(jié)數(shù)是4個(gè)字節(jié), 我們就能換算出int?UNSIGNED(無符號(hào))類型的能存儲(chǔ)的最小值為0, 最大值為4294967295(即4B=32b, 最大值即為32個(gè)1組成); 接下來我們?cè)僬f說我們建表時(shí)的字段長(zhǎng)度到底是怎么一回事. CREATE TABLE `test` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`number` INT( 5 ) NOT NULL
) ENGINE = MYISAM ; 以test表的number字段為例, 大家看到我建的是int(5)
mysql手冊(cè)中這個(gè)長(zhǎng)度/值用"M"來表示的. 細(xì)心的朋友應(yīng)該有注意到過mysql手冊(cè)上有這么一句話:??M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與存儲(chǔ)大小或類型包含的值的范圍無關(guān); 這句話看上去不太容易理解, 因?yàn)檫@里有個(gè)關(guān)鍵詞容易讓我們混淆, "最大顯示寬度"我們第一反應(yīng)是該字段的值最大能允許存放的值的寬度. 以為我們建了int(1),就不能存放數(shù)據(jù)10了, 其實(shí)不是這個(gè)意思. 這個(gè)M=5我們可以簡(jiǎn)單的理解成為, 我們建立這個(gè)長(zhǎng)度是為了告訴MYSQL數(shù)據(jù)庫我們這個(gè)字段的存儲(chǔ)的數(shù)據(jù)的寬度為5位數(shù),? 當(dāng)然如果你不是5位數(shù)(只要在該類型的存儲(chǔ)范圍之內(nèi))MYSQL也能正常存儲(chǔ),? 這也就能解釋以上標(biāo)紅的話. 我們把這個(gè)字段的"屬性"修改為UNSIGNED ZEROFILL看一下效果.
?
我們看到現(xiàn)在我的number字段, 長(zhǎng)度(M)=5, 屬性=UNSIGNED ZEROFILL(無符號(hào),用0來填充位數(shù)),? 設(shè)置這個(gè)屬性后我往表時(shí)插入數(shù)據(jù),系統(tǒng)會(huì)自動(dòng)把number字段M不夠5位的在左側(cè)用0來填充; 效果如下?
手冊(cè)上還有這么一句話"當(dāng)?mysql?為某些復(fù)雜的聯(lián)結(jié)(join)生成臨時(shí)表時(shí),你可能會(huì)遇到問題,因?yàn)樵谶@種情況下,mysql 信任地認(rèn)為所有的值均適合原始的列寬度". 這也讓我不禁感嘆這個(gè)寬度到底如何設(shè)置比較合適? 但有一點(diǎn)看完該文檔你應(yīng)該清楚的知道, 長(zhǎng)度M與你存放的數(shù)值型的數(shù)的大小無關(guān).轉(zhuǎn)載于:https://www.cnblogs.com/rxbook/p/6049858.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的关于mysql中int(1)中int后面的数字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载]配置unp.h头文件环境
- 下一篇: Jenkins全新的UI体验-Blue