<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          聊聊Mysql中的int(1)

          共 1444字,需瀏覽 3分鐘

           ·

          2020-08-16 02:32

          昨天有個(gè)讀者問(wèn)了我這樣一個(gè)問(wèn)題在mysql中建表的時(shí)候,我設(shè)置一個(gè)字段為int類型,長(zhǎng)度為1,但是我發(fā)現(xiàn)這個(gè)字段卻可以存儲(chǔ)任意長(zhǎng)度的數(shù)字,這是什么情況?這個(gè)問(wèn)題在我剛接觸數(shù)據(jù)庫(kù)的時(shí)候也遇到過(guò),我覺(jué)得有必要寫一篇文章來(lái)解釋一下。

          0?和?1?是計(jì)算機(jī)最基本的存儲(chǔ)單位。也是?CPU?采用的最基本的計(jì)算單位,也就是二進(jìn)制。int?類型占?4?個(gè)字節(jié),一個(gè)字節(jié)是?8?位,也就是說(shuō)?int?類型在計(jì)算機(jī)底層是由?32?個(gè)?0?跟?1?表示,轉(zhuǎn)化為十進(jìn)制就是?2?的?32?次方,那么存儲(chǔ)范圍就是?0~2^32?,如果帶符號(hào)位的話就是?-2^31?~?2^31-1?。

          在使用SQLyog工具建表時(shí),除了常見(jiàn)的幾個(gè)屬性Field NameDataTypeLenDefaultPK?Not Null?Auto Incr?Comment之外,還有兩個(gè)不常用的Unsigned?Zerofill?,這兩個(gè)屬性到底有什么用呢?

          Unsigned無(wú)符號(hào)的,意思就是只能為正數(shù),不能為負(fù)數(shù)。

          Zerofill零填充,意思就是達(dá)不到指定長(zhǎng)度后,前面用?0?來(lái)填充。

          現(xiàn)在再來(lái)看看這個(gè)int(1)中的1究竟有什么奧秘。這個(gè)1跟這個(gè)字段能存的數(shù)據(jù)范圍沒(méi)關(guān)系,它也不是限制這個(gè)字段的數(shù)據(jù)長(zhǎng)度的。這個(gè)字段存儲(chǔ)的數(shù)據(jù)范圍是由int來(lái)限制的。

          這個(gè)1只是規(guī)定了數(shù)據(jù)的寬度,如果你選擇了Zerofill屬性,就能更好地理解這個(gè)1了,如果我們寫入的數(shù)據(jù)達(dá)不到這個(gè)長(zhǎng)度,那么就會(huì)在數(shù)據(jù)前面補(bǔ)0來(lái)達(dá)到這個(gè)長(zhǎng)度。比如我們將int(1)改成int(3),我們?cè)佥斎?code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: inherit;line-height: inherit;overflow-wrap: break-word;border-radius: 4px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">1,實(shí)際上顯示的是001。所以無(wú)論你將?int?類型的長(zhǎng)度設(shè)為多少并不會(huì)影響數(shù)據(jù)的存儲(chǔ)范圍。

          mysql對(duì)于整型的數(shù)據(jù)類型,不僅給我們提供了int,還提供了tinyintsmallintmediumintbigint。這些類型存儲(chǔ)的數(shù)據(jù)范圍都是不一樣的,具體如下表:

          類型字節(jié)最小值最大值


          (帶符號(hào)的/無(wú)符號(hào)的)(帶符號(hào)的/無(wú)符號(hào)的)
          TINYINT1-128127


          0255
          SMALLINT2-3276832767


          065535
          MEDIUMINT3-83886088388607


          016777215
          INT4-21474836482147483647


          04294967295
          BIGINT8-92233720368547758089223372036854775807


          018446744073709551615

          看到這兒,應(yīng)該已經(jīng)清楚int(1)的真正含義了。根據(jù)實(shí)際需求選擇合適的數(shù)據(jù)類型來(lái)存儲(chǔ)就可以了。

          再來(lái)聊一聊一個(gè)常見(jiàn)的面試題:int類型做自增主鍵有沒(méi)有可能存儲(chǔ)完?

          肯定是有的,都有數(shù)據(jù)范圍了,主鍵一直增長(zhǎng)肯定有可能會(huì)達(dá)到這個(gè)范圍。

          很多小伙伴是不是心中飄過(guò)一萬(wàn)匹草泥馬,忙著修改數(shù)據(jù)庫(kù)去了。這其實(shí)大可不必?fù)?dān)心,這個(gè)數(shù)字大概是42億。如果數(shù)據(jù)量夠夠夠夠大,你選擇bigint做為自增主鍵肯定沒(méi)啥問(wèn)題。這個(gè)數(shù)字我已經(jīng)讀不出來(lái)了,交給評(píng)論區(qū)的你們來(lái)讀!

          < END >

          往期精選
          ??如何有效防止SQL注入攻擊
          ?《RabbitMQ》什么是死信隊(duì)列
          ?《RabbitMQ》如何保證消息不被重復(fù)消費(fèi)
          ?《RabbitMQ》如何保證消息的可靠性

          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线浏览亚洲性图 | 国产高潮的视频网站在线观看 | 逼逼成人网 | 999精品在线视频 | 国产专区在线播放 |