【MySQL】MySQL 中的 int(11) 到底代表什么意思?


一、前言二、簡介三、結論四、參考鏈接


一、前言

  在工作中經常要與 mysql 打交道,但是對 mysql 的各個字段類型一直都是一知半解,因此寫本文總結記錄一番。

二、簡介

  對於 int 類型的一些基礎知識其實上圖已經說的很明白了,在這里想討論下常用的 int(11) 代表什么意思,很長時間以來我都以為這代表着限制 int 的長度為 11 位,直到有天看到篇文章才明白,11 代表的並不是長度,而是字符的顯示寬度,在字段類型為 int 時,無論你顯示寬度設置為多少,int 類型能存儲的最大值和最小值永遠都是固定的,這里貼一些原文片段。

  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.

  那么照文中所說,所以無論怎么設置 int 類型的顯示寬度,int 所能存儲的最大值和最小值是固定的,那么這個顯示寬度到底有什么用呢?
  當 int 字段類型設置為無符號且填充零(UNSIGNED ZEROFILL)時,當數值位數未達到設置的顯示寬度時,會在數值前面補充零直到滿足設定的顯示寬度,為什么會有無符號的限制呢,是因為 ZEROFILL 屬性會隱式地將數值轉為無符號型,因此不能存儲負的數值。

  具體用以下代碼解釋。

首先創建一張表:

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

插入兩條數據

INSERT INTO int_demo (a, b, c, d, e) VALUES (11111);
INSERT INTO int_demo (a, b, c, d, e) VALUES (12345678901234567890123456789012345678901234567890);

select * from int_demo;

注釋:如果用 navicate 軟件查詢出來並不會顯示左邊的 0,但把數據導出時可看到真實的數據,猜測是軟件對數據格式進行了處理。

三、結論

從上個例子我們可以得出以下幾個結論:

  1、如果一個字段設置了無符號和填充零屬性,那么無論這個字段存儲什么數值,數值的長度都會與設置的顯示寬度一致,如上述例子中的字段 b,插入數值 1 顯示為00000000001,左邊補了 10 個零直至長度達到 11 位;

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

  3、設置的字符寬度只對數值長度不滿足寬度時有效,如 d 字段 int(5),插入 1 時,長度不足 5,因此在左邊補充 4 個零直到 5 位,但是插入 1234567890 時超過了 5 位,這時的顯示寬度就起不了作用了。

四、參考鏈接

  https://segmentfault.com/a/1190000012479448


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM