1. 程式人生 > >MYSQL中的int(11)到底代表什麼意思?

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

)

插入兩條資料

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;

id a b c d e

1 1 00000000001 1 00001 1

2 1234567890 01234567890 1234567890 1234567890 1234567890

註釋:如果用navicate軟體查詢出來並不會顯示左邊的0,但把資料匯出時可看到真實的資料,猜測是軟體對資料格式進行了處理?

三、結論

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

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

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

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

瀋陽無痛人流多少錢:http://iask.sina.com.cn/h-fk

瀋陽性病醫院哪家好