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
欄位時,該欄位會設定為下一個序列值。通常這是
,其中 值
+1值
是資料表中目前欄位的最大值。(AUTO_INCREMENT
序列從 1
開始。)
將 0
儲存到 AUTO_INCREMENT
欄位具有與儲存 NULL
相同的效果,除非啟用 NO_AUTO_VALUE_ON_ZERO
SQL 模式。
插入 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
屬性以避免潛在的相容性問題,或將它們轉換為整數型別。