<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>

          int(1) 和 int(10) 有什么區(qū)別?老司機(jī)竟然都理解錯(cuò)了!

          共 1715字,需瀏覽 4分鐘

           ·

          2022-02-26 00:54

          點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

          作者:假裝懂編程

          來(lái)源:https://juejin.cn/post/6992574502282477605

          困惑

          最近遇到個(gè)問(wèn)題,有個(gè)表的要加個(gè)user_id字段,user_id字段可能很大,于是我提mysql工單alter table xxx ADD user_id int(1)。

          領(lǐng)導(dǎo)看到我的sql工單,于是說(shuō):這int(1)怕是不夠用吧,接下來(lái)是一通解釋。

          其實(shí)這不是我第一次遇到這樣的問(wèn)題了,其中不乏有工作5年以上的老司機(jī)。

          包括我經(jīng)常在也看到同事也一直使用int(10),感覺(jué)用了int(1),字段的上限就被限制,真實(shí)情況肯定不是這樣。

          數(shù)據(jù)說(shuō)話(huà)

          我們知道在mysql中 int占4個(gè)字節(jié),那么對(duì)于無(wú)符號(hào)的int,最大值是2^32-1 = 4294967295,將近40億,難道用了int(1),就不能達(dá)到這個(gè)最大值嗎?


          CREATE?TABLE?`user`?(
          ??`id`?int(1)?unsigned?NOT?NULL?AUTO_INCREMENT,
          ???PRIMARY?KEY?(`id`)
          )?ENGINE=InnoDB?AUTO_INCREMENT=1?DEFAULT?CHARSET=utf8mb4;

          id字段為無(wú)符號(hào)的int(1),我來(lái)插入一個(gè)最大值看看。


          mysql>?INSERT?INTO?`user`?(`id`)?VALUES?(4294967295);
          Query?OK,?1?row?affected?(0.00?sec)

          可以看到成功了,說(shuō)明int后面的數(shù)字,不影響int本身支持的大小,int(1)、int(2)...int(10)沒(méi)什么區(qū)別。

          零填充

          一般int后面的數(shù)字,配合zerofill一起使用才有效。先看個(gè)例子:


          CREATE?TABLE?`user`?(
          ??`id`?int(4)?unsigned?zerofill?NOT?NULL?AUTO_INCREMENT,
          ???PRIMARY?KEY?(`id`)
          )?ENGINE=InnoDB?AUTO_INCREMENT=1?DEFAULT?CHARSET=utf8mb4;

          注意int(4)后面加了個(gè)zerofill,我們先來(lái)插入4條數(shù)據(jù)。


          mysql>?INSERT?INTO?`user`?(`id`)?VALUES?(1),(10),(100),(1000);
          Query?OK,?4?rows?affected?(0.00?sec)
          Records:?4??Duplicates:?0??Warnings:?0

          分別插入1、10、100、1000 4條數(shù)據(jù),然后我們來(lái)查詢(xún)下:


          mysql>?select?*?from?user;
          +------+
          |?id???|
          +------+
          |?0001?|
          |?0010?|
          |?0100?|
          |?1000?|
          +------+
          4?rows?in?set?(0.00?sec)

          通過(guò)數(shù)據(jù)可以發(fā)現(xiàn) int(4) + zerofill實(shí)現(xiàn)了不足4位補(bǔ)0的現(xiàn)象,單單int(4)是沒(méi)有用的。而且對(duì)于0001這種,底層存儲(chǔ)的還是1,只是在展示的會(huì)補(bǔ)0。

          總結(jié)

          int后面的數(shù)字不能表示字段的長(zhǎng)度,int(num)一般加上zerofill,才有效果。

          zerofill的作用一般可以用在一些編號(hào)相關(guān)的數(shù)字中,比如學(xué)生的編號(hào) 001 002 ... 999這種,如果mysql沒(méi)有零填充的功能,但是你又要格式化輸出等長(zhǎng)的數(shù)字編號(hào)時(shí),那么你只能自己處理了。

          ? ? ?

          1、來(lái)自谷歌的開(kāi)發(fā)心得:所有SQL和代碼,都沒(méi)必要藏著掖著

          2、用了這么久的 Chrome,你不會(huì)還沒(méi)掌握這個(gè)功能吧?

          3、一個(gè)比SpringBoot快44倍的Java框架

          4、QQ最近上線(xiàn)的兩個(gè)新功能,把我人都看傻了!

          5、SpringBoot 三大開(kāi)發(fā)工具,你都用過(guò)么?

          點(diǎn)分享

          點(diǎn)收藏

          點(diǎn)點(diǎn)贊

          點(diǎn)在看

          瀏覽 37
          點(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>
                  成人黄色大片 | 国产三级电影在线观看 | 欧美日韩在线免费观看视频 | 小骚屄在线 | 九九全国免费视频 |