明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

MYSQL中的int(11)代表什么

[摘要]在工作中經(jīng)常要與mysql打交道,但是對(duì)mysql的各個(gè)字段類型一直都是一知半解,MYSQL中的int(11)代表什么呢?大家可能也不太清楚,因此寫(xiě)本文總結(jié)記錄一番。對(duì)于int類型的一些基礎(chǔ)知識(shí)其實(shí)...
在工作中經(jīng)常要與mysql打交道,但是對(duì)mysql的各個(gè)字段類型一直都是一知半解,MYSQL中的int(11)代表什么呢?大家可能也不太清楚,因此寫(xiě)本文總結(jié)記錄一番。

對(duì)于int類型的一些基礎(chǔ)知識(shí)其實(shí)上圖已經(jīng)說(shuō)的很明白了,在這里想討論下常用的int(11)代表什么意思,很長(zhǎng)時(shí)間以來(lái)我都以為這代表著限制int的長(zhǎng)度為11位,直到有天看到篇文章才明白,11代表的并不是長(zhǎng)度,而是字符的顯示寬度,在字段類型為int時(shí),無(wú)論你顯示寬度設(shè)置為多少,int類型能存儲(chǔ)的最大值和最小值永遠(yuǎn)都是固定的,這里貼一些原文片段

The number in the parenthesis does not determines the max and min values that can be stored in the integer field. The max and min values that can be stored are always fixed.

The display width of the column does not affects the maximum value that can be stored in that column. A column with INT(5) or INT(11) can store the same maximum values. Also, if you have a column INT(20) that does not means that you will be able to store 20 digit values (BIGINT values). The column still will store only till the max values of INT.

那么照文中所說(shuō),所以無(wú)論怎么設(shè)置int類型的顯示寬度,int所能存儲(chǔ)的最大值和最小值是固定的,那么這個(gè)顯示寬度到底有什么用呢?
當(dāng)int字段類型設(shè)置為無(wú)符號(hào)填充零(UNSIGNED ZEROFILL)時(shí),當(dāng)數(shù)值位數(shù)未達(dá)到設(shè)置的顯示寬度時(shí),會(huì)在數(shù)值前面補(bǔ)充零直到滿足設(shè)定的顯示寬度,為什么會(huì)有無(wú)符號(hào)的限制呢,是因?yàn)閆EROFILL屬性會(huì)隱式地將數(shù)值轉(zhuǎn)為無(wú)符號(hào)型,因此不能存儲(chǔ)負(fù)的數(shù)值。

具體用以下代碼解釋。

首先創(chuàng)建一張表:

CREATE TABLE int_demo (
    id INT(11) NOT NULL AUTO_INCREMENT,
    a INT(11) NOT NULL,
    b INT(11) UNSIGNED ZEROFILL NOT NULL,
    c INT(5) DEFAULT NULL,
    d INT(5) UNSIGNED ZEROFILL NOT NULL,
    e INT(15) DEFAULT NULL,
    PRIMARY KEY (`id`)
)

插入兩條數(shù)據(jù)

INSERT INTO int_demo (a, b, c, d, e) VALUES (1, 1, 1, 1, 1);
INSERT INTO int_demo (a, b, c, d, e) VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890);
 select * from int_demo;
idabcde
11000000000011000011
2123456789001234567890123456789012345678901234567890

注釋:如果用navicate軟件查詢出來(lái)并不會(huì)顯示左邊的0,但把數(shù)據(jù)導(dǎo)出時(shí)可看到真實(shí)的數(shù)據(jù),猜測(cè)是軟件對(duì)數(shù)據(jù)格式進(jìn)行了處理?

從上個(gè)例子我們可以得出以下幾個(gè)結(jié)論:

  1. 如果一個(gè)字段設(shè)置了無(wú)符號(hào)和填充零屬性,那么無(wú)論這個(gè)字段存儲(chǔ)什么數(shù)值,數(shù)值的長(zhǎng)度都會(huì)與設(shè)置的顯示寬度一致,如上述例子中的字段b,插入數(shù)值1顯示為00000000001,左邊補(bǔ)了10個(gè)零直至長(zhǎng)度達(dá)到11位;

  2. 設(shè)置字段的顯示寬度并不限制字段存儲(chǔ)值的范圍,比如字段d設(shè)置為int(5),但是仍然可以存儲(chǔ)1234567890這個(gè)10位數(shù)字;

  3. 設(shè)置的字符寬度只對(duì)數(shù)值長(zhǎng)度不滿足寬度時(shí)有效,如d字段int(5),插入1時(shí),長(zhǎng)度不足5,因此在左邊補(bǔ)充4個(gè)零直到5位,但是插入1234567890時(shí)超過(guò)了5位,這時(shí)的顯示寬度就起不了作用了。

相關(guān)推薦:

MYSQL如何自動(dòng)為查詢數(shù)據(jù)的結(jié)果編上序號(hào)方法教程

MySQL數(shù)據(jù)文件存儲(chǔ)位置的查看方法

mysql分頁(yè)性能探索

以上就是MYSQL中的int(11)代表什么的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門(mén)到精通的SQL知識(shí)。




標(biāo)簽:MYSQL中的int(11)代表啥