真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

INT類型知多少

前言:
整型是MySQL中最常用的字段類型之一,通常用于存儲(chǔ)整數(shù),其中int是整型中最常用的,對(duì)于int類型你是否真正了解呢?本文會(huì)帶你熟悉int類型相關(guān)知識(shí),也會(huì)介紹其他整型字段的使用。

創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶提供超值的營(yíng)銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營(yíng)銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個(gè)人等客戶提供了成都做網(wǎng)站、網(wǎng)站制作服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

1.整型分類及存儲(chǔ)范圍

整數(shù)類型字節(jié)有符號(hào)范圍無(wú)符號(hào)范圍
TINYINT1-128 ~ 1270 ~ 255
SMALLINT2-32768 ~ 327670 ~ 65535
MEDIUMINT3-8388608 ~ 83886070 ~ 16777215
INT/INTEGER4-2147483648 ~ 21474836470 ~ 4294967295
BIGINT8-9223372036854775808 ~ 92233720368547758070 ~ 18446744073709551615

表格一共有四列分別表示:字段類型, 占用字節(jié)數(shù), 有符號(hào)范圍, 無(wú)符號(hào)范圍。
我們拿int類型為例:
int類型, 占用字節(jié)數(shù)為4byte, 學(xué)過(guò)計(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)來(lái)表示byte, 位用小寫b來(lái)表示bit.

計(jì)算機(jī)存儲(chǔ)單位的換算:
1B=8b
1KB=1024B
1MB=1024KB

那么根據(jù)int類型允許存儲(chǔ)的字節(jié)數(shù)是4個(gè)字節(jié), 我們就能換算出int UNSIGNED(無(wú)符號(hào))類型的能存儲(chǔ)的最小值為0, 最大值為4294967295(即4B=32b, 最大值即為32個(gè)1組成,即4294967295換算成二進(jìn)制則是32個(gè)1)。

2.存儲(chǔ)范圍測(cè)試

mysql> CREATE TABLE test_int (
    -> col1 TINYINT,
    -> col2 SMALLINT,
    -> col3 MEDIUMINT,
    -> col4 INT,
    -> col5 BIGINT
    -> ) ENGINE = INNODB DEFAULT CHARSET = utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> show create table test_int\G
*************************** 1. row ***************************
       Table: test_int
Create Table: CREATE TABLE `test_int` (
  `col1` tinyint(4) DEFAULT NULL,
  `col2` smallint(6) DEFAULT NULL,
  `col3` mediumint(9) DEFAULT NULL,
  `col4` int(11) DEFAULT NULL,
  `col5` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> insert into test_int values (1234,123456,12345678,12345678901,12345678901234567890);
Query OK, 1 row affected, 5 warnings (0.00 sec)

mysql> insert into test_int values (-1234,-123456,-12345678,-12345678901,-12345678901234567890);
Query OK, 1 row affected, 5 warnings (0.01 sec)

mysql> show warnings;
+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1264 | Out of range value for column 'col1' at row 1 |
| Warning | 1264 | Out of range value for column 'col2' at row 1 |
| Warning | 1264 | Out of range value for column 'col3' at row 1 |
| Warning | 1264 | Out of range value for column 'col4' at row 1 |
| Warning | 1264 | Out of range value for column 'col5' at row 1 |
+---------+------+-----------------------------------------------+
5 rows in set (0.01 sec)

mysql> select * from test_int;
+------+--------+----------+-------------+----------------------+
| col1 | col2   | col3     | col4        | col5                 |
+------+--------+----------+-------------+----------------------+
|  127 |  32767 |  8388607 |  2147483647 |  9223372036854775807 |
| -128 | -32768 | -8388608 | -2147483648 | -9223372036854775808 |
+------+--------+----------+-------------+----------------------+

從上述測(cè)試中我們可以看出:有符號(hào)時(shí),各種整型類型最大的存儲(chǔ)范圍,當(dāng)存儲(chǔ)數(shù)字大小不在存儲(chǔ)范圍時(shí),MySQL會(huì)產(chǎn)生告警,但數(shù)字可以插入,默認(rèn)截取為可存儲(chǔ)的最大值或最小值。

3.int(M)中M的含義與zerofill的使用

我們經(jīng)常聽(tīng)到這句話:int(M)中的M代表最大顯示寬度,"最大顯示寬度"我們第一反應(yīng)是該字段的值最大能允許存放的值的寬度,以為我們建了int(1),就不能存放數(shù)據(jù)10了, 其實(shí)不是這個(gè)意思。
整數(shù)列的顯示寬度與mysql需要用多少個(gè)字符來(lái)顯示該列數(shù)值,與該整數(shù)需要的存儲(chǔ)空間的大小都沒(méi)有關(guān)系,比如,不管設(shè)定了顯示寬度是多少個(gè)字符,int都是占用4個(gè)字節(jié),bigint都要占用8個(gè)字節(jié)。即int(5)和int(10)可存儲(chǔ)的范圍一樣。
整型字段有個(gè)ZEROFILL屬性(0填充),在數(shù)字長(zhǎng)度不夠的數(shù)據(jù)前面填充0,以達(dá)到設(shè)定的長(zhǎng)度。加上ZEROFILL后M才表現(xiàn)出不同,當(dāng)使用ZEROFILL時(shí),默認(rèn)會(huì)自動(dòng)加unsigned(無(wú)符號(hào))屬性。比如 INT(3) ZEROFILL,你插入到數(shù)據(jù)庫(kù)里的是10,則實(shí)際插入為010,也就是在前面補(bǔ)充加了一個(gè)0,下面我們來(lái)測(cè)試下:

mysql> CREATE TABLE test_int_zerofill (
    -> col1 INT(5) ZEROFILL,
    -> col2 INT ZEROFILL,
    -> col3 INT(5)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> show create table test_int_zerofill\G
*************************** 1. row ***************************
       Table: test_int_zerofill
Create Table: CREATE TABLE `test_int_zerofill` (
  `col1` int(5) unsigned zerofill DEFAULT NULL,
  `col2` int(10) unsigned zerofill DEFAULT NULL,
  `col3` int(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> insert into test_int_zerofill values (12,12,12);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test_int_zerofill;
+-------+------------+------+
| col1  | col2       | col3 |
+-------+------------+------+
| 00012 | 0000000012 |   12 |
+-------+------------+------+
1 row in set (0.00 sec)

那么有同學(xué)可能會(huì)問(wèn)zerofill有什么應(yīng)用場(chǎng)景呢,比較常用的應(yīng)該是月份或日期前補(bǔ)0,這樣顯示的會(huì)規(guī)范些

CREATE TABLE `t_zerofill` (  
  `year` year(4) DEFAULT NULL,  
  `month` int(2) unsigned zerofill DEFAULT NULL,  
  `day` int(2) unsigned zerofill DEFAULT NULL  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql> insert into t_zerofill values (2019,6,5);
Query OK, 1 row affected (0.01 sec)

mysql> insert into t_zerofill values (2019,6,18);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_zerofill values (2019,10,1);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_zerofill values (2019,11,11);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_zerofill;
+------+-------+------+
| year | month | day  |
+------+-------+------+
| 2019 |    06 |   05 |
| 2019 |    06 |   18 |
| 2019 |    10 |   01 |
| 2019 |    11 |   11 |
+------+-------+------+
4 rows in set (0.00 sec)

4.類型選取

經(jīng)過(guò)上面的介紹,關(guān)于不同整型字段的選取變得容易很多。本著最小化存儲(chǔ)的原則,當(dāng)然是能選TINYINT不選SMALLINT,能選MEDIUMINT不選INT了,不過(guò)一切都要滿足業(yè)務(wù)的前提下盡量選取占用字節(jié)更少的類型。對(duì)于確定只存儲(chǔ)正整數(shù)的字段,可以加上unsigned屬性,這樣會(huì)使存儲(chǔ)范圍更大,比如當(dāng)字段有AUTO_INCREMENT屬性時(shí),我們可以為int類型加上unsigned屬性。


網(wǎng)頁(yè)名稱:INT類型知多少
分享URL:http://weahome.cn/article/ijphcs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部