MySQL 支援一個擴充功能,可以選擇性地在類型基本關鍵字後面的括號中指定整數資料類型的顯示寬度。例如,INT(4)
指定一個顯示寬度為四位數的 INT
。應用程式可以使用這個選用的顯示寬度來顯示寬度小於欄位指定寬度的整數值,方法是使用空格在左側進行填補。(也就是說,此寬度存在於隨著結果集傳回的中繼資料中。是否使用它取決於應用程式。)
顯示寬度不會限制可以儲存在欄位中的值範圍。它也不會阻止顯示寬度大於欄位顯示寬度的值被正確顯示。例如,指定為 SMALLINT(3)
的欄位具有 SMALLINT
的通常範圍 -32768
到 32767
,並且超出三位數允許範圍的值會使用超過三位數的完整值來顯示。
當與選用的(非標準)ZEROFILL
屬性一起使用時,空格的預設填補會替換為零。例如,對於宣告為 INT(4) ZEROFILL
的欄位,值 5
會被擷取為 0005
。
對於牽涉到表達式或 UNION
查詢的欄位,會忽略 ZEROFILL
屬性。
如果您在具有 ZEROFILL
屬性的整數欄位中儲存大於顯示寬度的值,則當 MySQL 為某些複雜的聯結產生暫存表時,您可能會遇到問題。在這些情況下,MySQL 會假設資料值符合欄位顯示寬度。
對於數值資料類型,ZEROFILL
屬性已棄用,對於整數資料類型,顯示寬度屬性也已棄用。您應該預期在未來版本的 MySQL 中會移除對 ZEROFILL
和整數資料類型顯示寬度的支援。請考慮使用其他方法來產生這些屬性的效果。例如,應用程式可以使用 LPAD()
函數將數字以零填補到所需的寬度,或者它們可以將格式化的數字儲存在 CHAR
欄位中。
所有整數類型都可以具有選用的(非標準)UNSIGNED
屬性。可以使用無符號類型來允許欄位中僅包含非負數,或者當您需要該欄位更大的上限數值範圍時。例如,如果 INT
欄位是 UNSIGNED
,則欄位範圍的大小相同,但其端點會向上移動,從 -2147483648
和 2147483647
到 0
和 4294967295
。
浮點類型和定點類型也可以是 UNSIGNED
。與整數類型一樣,此屬性會阻止將負值儲存在欄位中。與整數類型不同,欄位值的上限範圍保持不變。對於類型為 FLOAT
、DOUBLE
和 DECIMAL
(以及任何同義詞)的欄位,UNSIGNED
已棄用,您應該預期在未來版本的 MySQL 中會移除對它的支援。請考慮改為對此類欄位使用簡單的 CHECK
限制。
如果為數值欄位指定 ZEROFILL
,MySQL 會自動新增 UNSIGNED
屬性。
整數或浮點數資料類型可以具有 AUTO_INCREMENT
屬性。當您將 NULL
值插入已編索引的 AUTO_INCREMENT
欄位時,該欄位會設定為下一個序列值。通常,這是
,其中 value
+1value
是目前資料表中該欄位的最大值。(AUTO_INCREMENT
序列從 1
開始。)
除非啟用 NO_AUTO_VALUE_ON_ZERO
SQL 模式,否則將 0
儲存到 AUTO_INCREMENT
欄位中的效果與儲存 NULL
相同。
插入 NULL
以產生 AUTO_INCREMENT
值時,需要將欄位宣告為 NOT NULL
。如果欄位宣告為 NULL
,則插入 NULL
會儲存 NULL
。當您將任何其他值插入 AUTO_INCREMENT
欄位時,該欄位會設定為該值,並且序列會重設,以便下一個自動產生值從插入值開始依序產生。
不支援 AUTO_INCREMENT
欄位的負值。
CHECK
限制不能參考具有 AUTO_INCREMENT
屬性的欄位,也不能將 AUTO_INCREMENT
屬性新增至在 CHECK
限制中使用的現有欄位。
對於 FLOAT
和 DOUBLE
欄位,AUTO_INCREMENT
已被棄用;預期在未來版本的 MySQL 中將會移除對它的支援。請考慮從這些欄位移除 AUTO_INCREMENT
屬性,以避免潛在的相容性問題,或將它們轉換為整數類型。