MySQL中所有數值型數據,統稱爲Numeric Type
各字段類型中:
DECIMAL和NUMERIC意義相等,用法相同,都是是fixed-point type(exact value)
FLOAT/DOUBLE 類型,分別代表單精度浮點/雙精度浮點類型。不管如何提高精度,也是floating-point type(approximate value),用來進行高精度計算會出問題;auto_increment特性在版本8從這兩種類型上棄用。這兩種類型後續也將被棄用。
附錄如下:
DATA TYPE | 字段類型 | 說明 |
Numeric Type
|
BIT |
bit-value type,取值範圍1-64,若不指定默認爲1 BIT(M)類型在賦值時,如果沒有完全用完位數會自動填充補齊 e.g. assigning a value of b'101' to a BIT(6) column is, in effect, the same as assigning b'000101' |
TINYINT |
取值範圍 -128 ~ 127(signed),0 ~255(unsigned) |
|
BOOL/BOOLEAN |
類型和TINYINT(1)相等,0表示false,1表示True (非0的2-9 均識別爲True,但True只識別爲1) |
|
SMALLINT |
取值範圍-32768 ~ 32767(signed), 0 ~ 65535(unsigned) |
|
MEDIUMINT |
取值範圍 -8388608 ~ 8388607,0 ~ 16777215 |
|
INT/INTEGER |
取值範圍 -2147483648 ~ 2147483647, 0 to 4294967295 |
|
BIGINT |
取值範圍 -9223372036854775808 ~ 9223372036854775807(signed), 0 ~ 18446744073709551615(unsigned) MySQL數學運算都使用 signed 的 BIGINT 和 DOUBLE,所以unsigned的BIGINT 不能超過signed的BIGINT最大值(922..., 63bits),不然會自動轉爲DOUBLE處理,發生計算錯誤 BIGINT還在MYSQL的運算中有這樣的應用,min() max() 整數之間的+ - * |
|
DECIMAL(M [, D]) syn: DEC,NUMERIC,FIXED |
M表示digits的位數(精度),D是小數點後允許的位數,M最大是65(默認爲10),D最大是30(默認爲0) 非整數間的 + - * 都使用DECIMAL 同義詞類型中FIXED適配其他的DBS |
|
FLOAT(M, D) |
單精度浮點數,Permissible values are -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38(IEEE標準,取決於硬件和OS可能更小) M是digits總位數,D表示小數點後的位數,省略時,默認按OS支持的最大,通常float對應的decimal place是7 FLOAT[M, D]是一種不標準的MySQL擴展,這種語法正在棄用並將在後續被徹底移除 |
|
FLOAT(P) |
浮點數without M和D,p表示bits精度,MySQL中,p在0~24認爲是單精度浮點數(FLOAT),p在25~53認爲是雙精度浮點數(DOUBLE)。 這種語法是爲了ODBC適配。 ODBC(Open Database Connectivity,開放數據庫互連)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分 |
|
DOUBLE(M, D) Syn: DOUBLE PRECISION 和 REAL |
DOUBLE PRECISION(M, D), REAL(M, D) 雙精度浮點數,Permissible values are -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308(IEEE標準,實際更小) M是digits總位數,D表示小數點後的位數,無時默認按OS支持的最大,通常decimal對應的decimal place是15 DOUBLE[M, D]是一種不標準的MySQL擴展,這種語法正在棄用並將在後續被徹底移除 DOUBLE PRECISION 和 REAL 是DOUBLE的同義詞,但如果設置了READL_AS_FLOAT則REAL表示FLOAT類型而非DOUBLE |
以MySQL 8.0 文檔中爲例)