對於整數資料類型,M 表示最小顯示寬度。最大顯示寬度為 255。顯示寬度與類型可以儲存的值的範圍無關,如 第 13.1.6 節,"數值類型屬性" 中所述。
對於浮點和定點資料類型,M 是可以儲存的總位數。
顯示寬度屬性對於整數資料類型已棄用;您應該預期在未來版本的 MySQL 中移除對它的支援。
如果您為數值欄位指定 ZEROFILL,MySQL 會自動將 UNSIGNED 屬性新增至欄位。
ZEROFILL 屬性對於數值資料類型已棄用;您應該預期在未來版本的 MySQL 中移除對它的支援。考慮使用其他方法來產生此屬性的效果。例如,應用程式可以使用 LPAD() 函式將數字以零填充至所需的寬度,或者它們可以將格式化的數字儲存在 CHAR 欄位中。
允許 UNSIGNED 屬性的數值資料類型也允許 SIGNED。然而,這些資料類型預設為有符號,因此 SIGNED 屬性沒有效果。
UNSIGNED 屬性對於類型為 FLOAT、DOUBLE 和 DECIMAL (以及任何同義詞) 的欄位已棄用;您應該預期在未來版本的 MySQL 中移除對它的支援。考慮改用簡單的 CHECK 限制來用於此類欄位。
SERIAL 是 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 的別名。
整數欄位定義中的 SERIAL DEFAULT VALUE 是 NOT NULL AUTO_INCREMENT UNIQUE 的別名。
當您在整數值之間使用減法時,如果其中一個類型為 UNSIGNED,則結果為無符號,除非啟用 NO_UNSIGNED_SUBTRACTION SQL 模式。請參閱 第 14.10 節,"轉換函式和運算子"。
一種位元值類型。
M表示每個值的位元數,從 1 到 64。如果省略M,則預設值為 1。TINYINT[(M)] [UNSIGNED] [ZEROFILL]一個非常小的整數。有符號的範圍是
-128到127。無符號的範圍是0到255。這些類型是
TINYINT(1)的同義詞。零值被視為 false。非零值被視為 truemysql> SELECT IF(0, 'true', 'false'); +------------------------+ | IF(0, 'true', 'false') | +------------------------+ | false | +------------------------+ mysql> SELECT IF(1, 'true', 'false'); +------------------------+ | IF(1, 'true', 'false') | +------------------------+ | true | +------------------------+ mysql> SELECT IF(2, 'true', 'false'); +------------------------+ | IF(2, 'true', 'false') | +------------------------+ | true | +------------------------+然而,值
TRUE和FALSE只是1和0的別名,如下所示mysql> SELECT IF(0 = FALSE, 'true', 'false'); +--------------------------------+ | IF(0 = FALSE, 'true', 'false') | +--------------------------------+ | true | +--------------------------------+ mysql> SELECT IF(1 = TRUE, 'true', 'false'); +-------------------------------+ | IF(1 = TRUE, 'true', 'false') | +-------------------------------+ | true | +-------------------------------+ mysql> SELECT IF(2 = TRUE, 'true', 'false'); +-------------------------------+ | IF(2 = TRUE, 'true', 'false') | +-------------------------------+ | false | +-------------------------------+ mysql> SELECT IF(2 = FALSE, 'true', 'false'); +--------------------------------+ | IF(2 = FALSE, 'true', 'false') | +--------------------------------+ | false | +--------------------------------+最後兩個陳述式顯示的結果如所示,因為
2既不等於1也不等於0。SMALLINT[(M)] [UNSIGNED] [ZEROFILL]一個小的整數。有符號的範圍是
-32768到32767。無符號的範圍是0到65535。MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]一個中等大小的整數。有符號的範圍是
-8388608到8388607。無符號的範圍是0到16777215。INT[(M)] [UNSIGNED] [ZEROFILL]一個正常大小的整數。有符號的範圍是
-2147483648到2147483647。無符號的範圍是0到4294967295。INTEGER[(M)] [UNSIGNED] [ZEROFILL]此類型是
INT的同義詞。BIGINT[(M)] [UNSIGNED] [ZEROFILL]大型整數。帶符號範圍為
-9223372036854775808到9223372036854775807。無符號範圍為0到18446744073709551615。SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的別名。關於
BIGINT欄位,您應該注意以下幾點所有算術運算皆使用帶符號的
BIGINT或DOUBLE值進行,因此您不應使用大於9223372036854775807(63 位元) 的無符號大整數,除非使用位元函數!如果您這樣做,由於將BIGINT值轉換為DOUBLE時的捨入誤差,結果中的某些末位數字可能會錯誤。MySQL 在以下情況下可以處理
BIGINT:當使用整數在
BIGINT欄位中儲存大型無符號值時。在
MIN(或col_name)MAX(中,其中col_name)col_name指的是BIGINT欄位。
您始終可以使用字串儲存方式,在
BIGINT欄位中儲存精確的整數值。在這種情況下,MySQL 會執行字串到數字的轉換,其中不涉及中間的雙精度表示。當兩個運算元都是整數值時,
-、+和*運算子會使用BIGINT算術運算。這表示如果您將兩個大整數(或從傳回整數的函數取得的結果)相乘,當結果大於9223372036854775807時,您可能會得到意料之外的結果。
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]壓縮的「精確」定點數。
M是位數總數(精度),而D是小數點後的位數(比例)。小數點和(對於負數)-符號不計入M中。如果D為 0,則值沒有小數點或小數部分。DECIMAL的最大位數 (M) 為 65。支援的最大小數位數 (D) 為 30。如果省略D,則預設值為 0。如果省略M,則預設值為 10。(對於DECIMAL文字的長度也有一個限制;請參閱 第 14.24.3 節「運算式處理」)。如果指定
UNSIGNED,則不允許負值。UNSIGNED屬性對於DECIMAL類型(以及任何同義詞)的欄位已棄用;您應該預期在未來的 MySQL 版本中會移除對它的支援。請考慮改為針對此類欄位使用簡單的CHECK限制。所有使用
DECIMAL欄位的基本計算 (+, -, *, /) 都以 65 位數的精度完成。DEC[(、M[,D])] [UNSIGNED] [ZEROFILL]NUMERIC[(、M[,D])] [UNSIGNED] [ZEROFILL]FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]小型 (單精度) 浮點數。允許的值為
-3.402823466E+38到-1.175494351E-38、0以及1.175494351E-38到3.402823466E+38。這些是基於 IEEE 標準的理論限制。實際範圍可能會根據您的硬體或作業系統而稍小。M是位數總數,而D是小數點後的位數。如果省略M和D,則值會儲存到硬體允許的限制。單精度浮點數的精確度約為 7 位小數。FLOAT(是非標準的 MySQL 擴充功能。此語法已棄用,您應該預期在未來的 MySQL 版本中會移除對它的支援。M,D)如果指定
UNSIGNED,則不允許負值。UNSIGNED屬性對於FLOAT類型(以及任何同義詞)的欄位已棄用,您應該預期在未來的 MySQL 版本中會移除對它的支援。請考慮改為針對此類欄位使用簡單的CHECK限制。使用
FLOAT可能會給您帶來一些意想不到的問題,因為 MySQL 中的所有計算都是以雙精度完成的。請參閱第 B.3.4.7 節「解決無相符列的問題」。FLOAT(p) [UNSIGNED] [ZEROFILL]浮點數。
p表示位元的精度,但 MySQL 僅使用此值來判斷是否要使用FLOAT或DOUBLE作為產生的資料類型。如果p為 0 到 24,則資料類型會變成沒有M或D值的FLOAT。如果p為 25 到 53,則資料類型會變成沒有M或D值的DOUBLE。產生的欄位的範圍與本節前面所述的單精度FLOAT或雙精度DOUBLE資料類型相同。如果指定
UNSIGNED,則不允許負值。UNSIGNED屬性對於FLOAT類型(以及任何同義詞)的欄位已棄用,您應該預期在未來的 MySQL 版本中會移除對它的支援。請考慮改為針對此類欄位使用簡單的CHECK限制。提供
FLOAT(語法是為了與 ODBC 相容。p)DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]標準大小 (雙精度) 浮點數。允許的值為
-1.7976931348623157E+308到-2.2250738585072014E-308、0以及2.2250738585072014E-308到1.7976931348623157E+308。這些是基於 IEEE 標準的理論限制。實際範圍可能會根據您的硬體或作業系統而稍小。M是總位數,而D是小數點後的位數。如果省略M和D,則數值會儲存至硬體允許的限制。雙精度浮點數的精確度約為 15 個小數位。DOUBLE(是一個非標準的 MySQL 擴充功能,且已被棄用。您應該預期此語法在未來版本的 MySQL 中會被移除。M,D)如果指定
UNSIGNED,則不允許負值。對於DOUBLE類型(及其任何同義詞)的欄位,UNSIGNED屬性已被棄用,您應該預期其支援在未來版本的 MySQL 中會被移除。請考慮改為對此類欄位使用簡單的CHECK限制。DOUBLE PRECISION[(,M,D)] [UNSIGNED] [ZEROFILL]REAL[(M,D)] [UNSIGNED] [ZEROFILL]這些類型是
DOUBLE的同義詞。例外情況:如果啟用了REAL_AS_FLOATSQL 模式,則REAL是FLOAT而不是DOUBLE的同義詞。