2012-05-10 65 views
1

根據文檔,括號中的屬性(例如,SMALLINT(3)中的「3」)應該將SMALLINT的值顯示爲三位數。然而,當我插入5個測試數字(9,99,999,9999,999999)時,它將每個數字都設置爲其全部值,而不是將其限制在三位數字上並相應地顯示它(除了99999,當然,它上限爲32767)。不應該將數字限制在至少顯示三位數字的位置嗎?還是我錯過了這裏的真正目的?MySQL中整數括號中屬性的用途是什麼?

回答

3

the manual指出:

M指示整數類型的最大顯示寬度。對於浮點型和定點型,M是可以存儲的位數(精度)的總數。對於字符串類型,M是最大長度。最大允許值爲M取決於數據類型。

此外,如所述的here

MySQL支持用於選擇指定的整數數據類型的顯示寬度括號中的類型base關鍵字以下的延伸部。例如,INT(4)指定了一個INT,顯示寬度爲四位數。這個可選的顯示寬度可以被應用程序用來顯示寬度小於爲列指定的寬度的整數值,方法是用空格填充它們。 (即,該寬度是存在於與返回結果集的元數據。無論是使用或不使用要由應用程序。)

顯示寬度不限制可以存儲在值的範圍該列。它也不會阻止比列顯示寬度更寬的值被正確顯示。例如,指定爲SMALLINT(3)的列具有通常的SMALLINT範圍-3276832767,且三位數所允許的範圍之外的值全部使用三位以上的數字顯示。

當與可選(非標準)屬性ZEROFILL一起使用時,空格的默認填充將替換爲零。例如,對於聲明爲INT(4) ZEROFILL的列,值5被檢索爲0005

注意
當列涉及到表達式或UNION查詢的ZEROFILL屬性將被忽略。

如果將值大於顯示寬度的值存儲在具有ZEROFILL屬性的整數列中,那麼當MySQL爲某些複雜聯接生成臨時表時,可能會遇到問題。在這些情況下,MySQL假定數據值符合列顯示寬度。

所有整數類型都可以具有可選(非標準)屬性UNSIGNED。無符號類型可用於只允許列中的非負數,或者當您需要列的較大數值範圍時。例如,如果INT列是UNSIGNED,列範圍的大小是相同的,但其端點從-21474836482147483647轉變爲04294967295

浮點型和定點型也可以是UNSIGNED。與整數類型一樣,此屬性可防止將負值存儲在列中。與整數類型不同,列值的上限範圍保持不變。

如果您爲數字列指定ZEROFILL,MySQL會自動將UNSIGNED屬性添加到列中。

整數或浮點數據類型可以具有附加屬性AUTO_INCREMENT。將NULL(推薦)或0的值插入索引爲AUTO_INCREMENT的列中時,該列將設置爲下一個序列值。通常,這是value+ 1,其中值最大value對於目前在表中的列。 AUTO_INCREMENT序列以1開頭。

+0

+1 ......這就是我說的話:d –

+0

感謝您的詳細答覆,但這是從手冊中的所有複製粘貼。一般來說,括號是有意義的(就像在DOUBLES等),但特別是像INT和SMALLINT這樣的數字類型,這個屬性似乎不會影響條目。比屬性應該允許的值更好地存儲,並且在查詢時,條目仍然返回完整值而不是爲了顯示目的而被約束,手冊似乎認爲它會這樣做。在這些情況下,似乎這個屬性在這個實現中是無用的。 – Abion47

+1

@ Abion47:手冊解釋了所有這些(re'ZEROFILL');我從手冊中貼出來,因爲在你張貼這裏之前,你應該已經閱讀過,如果有什麼你不明白的地方詢問具體的問題...... – eggyal

相關問題