對於整數資料類型,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.25.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_FLOAT
SQL 模式,則REAL
是FLOAT
的同義詞,而不是DOUBLE
。