【mysql】整數類型

      網友投稿 1126 2025-04-02

      整數類型

      1. 類型介紹

      整數類型一共有 5 種,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。

      它們的區別如下表所示:

      舉例1:

      CREATE TABLE test_int1( f1 TINYINT, f2 SMALLINT, f3 MEDIUMINT, f4 INTEGER, f5 BIGINT ); DESC test_int1;

      INSERT INTO test_int1(f1) VALUES(12), (-12), (-128), (127) SELECT * FROM test_int1;

      當超出給定的范圍時,就會出錯

      Mysql為5.7時,可以看到生成的類型都有默認值,如:tinyint(4) 表示的是在 tinyint 范圍內 -128~127 的符號位是4位(符號+數字位數),所以默認數據的寬度為 4 ,其他同上。

      2. 可選屬性

      整數類型的可選屬性有三個:

      2.1 M

      INT(M): M表示顯示寬度,M的取值范圍是(0, 255)。例如,int(5):當數據寬度小于5位的時候在數字前面需要用字符填滿寬度。該項功能需要配合“ZEROFILL”使用,表示用“0”填滿寬度,否則指定顯示寬度無效。

      如果設置了顯示寬度,那么插入的數據寬度超過顯示寬度限制,會不會截斷或插入失敗?

      答案:不會對插入的數據有任何影響,還是按照類型的實際寬度進行保存,即顯示寬度與類型可以存儲的值范圍無關。從Mysql 8.0.17開始,整數數據類型不推薦使用顯示寬度屬性。

      案例說明:

      CREATE TABLE test_int2( f1 INT, f2 INT(5), f3 INT(5) ZEROFILL ) INSERT INTO test_int2(f1,f2) VALUES(123,123),(123456,123456); SELECT * FROM test_int2;

      【mysql】整數類型

      插入數據,當數值超過了 int(5) 給定的長度時,仍然沒有報錯

      這是因為INT(5)給定的只是顯示寬度,并不會影響對 int 本身的范圍

      INT(5) 只有配合 ZEROFILL 一起使用才有意義,如:對 f3 賦值

      INSERT INTO test_int2(f3) VALUES(123), (123456); SELECT * FROM test_int2;

      當使用 ZEROFILL 時,當不足給定的位數時,補充 0 充當位數

      ① 顯示寬度為5。當insert的值不足5位時,使用0填充。

      ②當使用ZEROFILL時,自動會添加UNSIGNED

      SHOW CREATE TABLE test_int2;

      整型數據類型可以在定義表結構時指定所需要的顯示寬度,如果不指定,則系統為每一種類型指定默認的寬度值。

      舉例2

      CREATE TABLE test_int11 ( x TINYINT,  y SMALLINT,  z MEDIUMINT,  m INT,  n BIGINT );

      查看表結構 (MySQL5.7中顯式如下,MySQL8中不再顯式范圍)

      mysql> desc test_int11; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | x | tinyint(4) | YES | | NULL | | |  y | smallint(6) | YES | | NULL | | |  z | mediumint(9) | YES | | NULL | | |  m | int(11) | YES | | NULL | | |  n | bigint(20) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)

      TINYINT有符號數和無符號數的取值范圍分別為-128 ~ 127和0~255,由于負號占了一個數字位,因此TINYINT默認的顯示寬度為4。同理,其他整數類型的默認顯示寬度與其有符號數的最小值的寬度相同。

      2.2 UNSIGNED

      UNSIGNED: 無符號類型(非負),所有的整數類型都有一個可選的屬性UNSIGNED(無符號屬性),無符號整數類型的最小取值為0。所以,如果需要在MySQL數據庫中保存非負整數值時,可以將整數類型設置為無符號類型。

      int類型默認顯示寬度為int(11),無符號int類型默認顯示寬度為int(10)。

      CREATE TABLE test_int3( f1 INT UNSIGNED ); mysql> desc test_int3; +-------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+-------+ | f1 | int(10) unsigned | YES | | NULL | | +-------+------------------+------+-----+---------+-------+ 1 row in set (0.00 sec)

      2.3 ZEROFILL

      ZEROFILL: 0填充,(如果某列是ZEROFILL,那么MySQL會自動為當前列添加UNSIGNED屬性),如果指定了ZEROFILL只是表示不夠M位時,用0在左邊填充,如果超過M位,只要不超過數據存儲范圍即可。

      原來,在 int(M) 中,M 的值跟 int(M) 所占多少存儲空間并無任何關系。 int(3)、int(4)、int(8) 在磁盤上都是占用 4 bytes 的存儲空間。也就是說,int(M),必須和UNSIGNED ZEROFILL 一起使用才有意義。 如果整數值超過M位,就按照實際位數存儲。只是無須再用字符 0 進行填充。

      3. 適用場景

      TINYINT:一般用于枚舉數據,比如系統設定取值范圍很小且固定的場景。

      SMALLINT:可以用于較小范圍的統計數據,比如統計工廠的固定資產庫存數量等。

      MEDIUMINT:用于較大整數的計算,比如車站每日的客流量等。

      INT、INTEGER:取值范圍足夠大,一般情況下不用考慮超限問題,用得最多。比如商品編號。

      BIGINT:只有當你處理特別巨大的整數時才會用到。比如雙十一的交易量、大型門戶網站點擊量、證券公司衍生產品持倉等。

      4. 如何選擇?

      在評估用哪種整數類型的時候,需要考慮存儲空間和可靠性的平衡問題:一方面,用占用字節數少的整數類型可以節省存儲空間;另一方面,要是為了節省存儲空間, 使用的整數類型取值范圍太小,一旦遇到超出取值范圍的情況,就可能引起系統錯誤,影響可靠性。

      舉個例子,商品編號采用的數據類型是 INT。原因就在于,客戶門店中流通的商品種類較多,而且,每天都有舊商品下架,新商品上架,這樣不斷迭代,日積月累。

      如果使用 SMALLINT 類型,雖然占用字節數比 INT 類型的整數少,但是卻不能保證數據不會超出范圍 65535。相反,使用 INT,就能確保有足夠大的取值范圍,不用擔心數據超出范圍影響可靠性的問題。

      要注意的是,在實際工作中,系統故障產生的成本遠遠超過增加幾個字段存儲空間所產生的成本。因此,建議首先確保數據不會超過取值范圍,在這個前提之下,再去考慮如何節省存儲空間。

      MySQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel2016概率密度分布曲線圖怎么制作
      下一篇:我要查找李小宇
      相關文章
      亚洲欧洲免费视频| AV激情亚洲男人的天堂国语| 亚洲Av无码国产一区二区| 国产精品亚洲精品观看不卡| 亚洲综合激情另类小说区| 亚洲av无码潮喷在线观看| 亚洲精品国产精品乱码视色| 亚洲午夜激情视频| 久久久久亚洲av毛片大| 亚洲男人的天堂一区二区| 亚洲国产成人久久综合野外| 亚洲国产精品13p| 亚洲精品视频免费观看| 亚洲精品无码久久不卡| 国产偷国产偷亚洲高清日韩| 亚洲人成影院在线无码观看| 亚洲色偷偷综合亚洲AV伊人| 亚洲人成网站18禁止一区| 77777亚洲午夜久久多人| 亚洲熟女一区二区三区| 久久精品国产亚洲网站| 亚洲无删减国产精品一区| 亚洲网站在线播放| 亚洲va精品中文字幕| 亚洲欧洲免费无码| 国产亚洲视频在线观看网址| 亚洲日韩VA无码中文字幕| 亚洲色偷偷综合亚洲AVYP| 亚洲AV午夜成人影院老师机影院| 亚洲福利在线视频| 亚洲大片免费观看| 亚洲中文字幕久久无码| 亚洲AV无码一区二三区| 国产亚洲自拍一区| 亚洲国产一区在线| 亚洲中文字幕人成乱码| 亚洲欧美国产日韩av野草社区| 午夜亚洲国产成人不卡在线| 亚洲伊人久久大香线蕉综合图片| 久久久久久亚洲av成人无码国产| 亚洲综合免费视频|