下面為數值列類型的概述。詳細信息參見11.2節,“數值類型”。列存儲需求參見11.5節,“列類型存儲需求”。
M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與存儲大小或類型包含的值的范圍無關,相關描述見11.2節,“數值類型”。
如果為一個數值列指定ZEROFILL,MySQL自動為該列添加UNSIGNED屬性。
SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的一個別名。
在整數列定義中,SERIAL DEFAULT VALUE是NOT NULL AUTO_INCREMENT UNIQUE的一個別名。
警告:應當清楚,當使用在整數值(其中一個是UNSIGNED類型)之間使用減號時,結果是無符號。參見12.8節,“Cast函數和操作符”。
· BIT[(M)]
位字段類型。M表示每個值的位數,范圍為從1到64。如果M被省略, 默認為1。
· TINYINT[(M)] [UNSIGNED] [ZEROFILL]
很小的整數。帶符號的范圍是-128到127。無符號的范圍是0到255。
· BOOL,BOOLEAN
是TINYINT(1)的同義詞。zero值被視為假。非zero值視為真。
在將來,將根據標準SQL引入完全布爾類型的處理。
· 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。
應清楚BIGINT列的下述內容:
o 使用帶符號的BIGINT或DOUBLE值進行所有算法,因此除了位函數,不應使用大于9223372036854775807(63位)的無符號的大整數! 如果這樣做,結果中的最后幾位可能出錯,這是由于將BIGINT值轉換為DOUBLE進行四舍五入時造成的錯誤。
MySQL可以在以下情況下處理BIGINT:
§ 當使用整數在一個BIGINT列保存大的無符號的值時。
§ 在MIN(col_name)或MAX(col_name)中,其中col_name指BIGINT列。
§ 使用操作符(+,-,*等等)并且兩個操作數均為整數時。
o 總是可以使用一個字符串在BIGINT列中保存嚴格整數值。在這種情況下,MySQL執行字符串-數字轉換,其間不存在雙精度表示。
o 當兩個操作數均為整數值時,-、+和* 操作符使用BIGINT算法。這說明如果乘兩個大整數(或來自返回整數的函數),當結果大于9223372036854775807時,會得到意想不到的結果。
· FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
小(單精度)浮點數。允許的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。這些是理論限制,基于IEEE標準。實際的范圍根據硬件或操作系統的不同可能稍微小些。
M是小數縱位數,D是小數點后面的位數。如果M和D被省略,根據硬件允許的限制來保存值。單精度浮點數精確到大約7位小數位。
如果指定UNSIGNED,不允許負值。
使用浮點數可能會遇到意想不到的問題,因為在MySQL中的所有計算用雙精度完成。參見A.5.7節,“解決與不匹配行有關的問題”。
· DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
普通大小(雙精度)浮點數。允許的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到 1.7976931348623157E+308。這些是理論限制,基于IEEE標準。實際的范圍根據硬件或操作系統的不同可能稍微小些。
M是小數總位數,D是小數點后面的位數。如果M和D被省略,根據硬件允許的限制來保存值。雙精度浮點數精確到大約15位小數位。
如果指定UNSIGNED,不允許負值。
· DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]
為DOUBLE的同義詞。除了:如果SQL服務器模式包括REAL_AS_FLOAT選項,REAL是FLOAT的同義詞而不是DOUBLE的同義詞。
· FLOAT(p) [UNSIGNED] [ZEROFILL]
浮點數。p表示精度(以位數表示),但MySQL只使用該值來確定是否結果列的數據類型為FLOAT或DOUBLE。如果p為從0到24,數據類型變為沒有M或D值的FLOAT。如果p為從25到53,數據類型變為沒有M或D值的DOUBLE。結果列范圍與本節前面描述的單精度FLOAT或雙精度DOUBLE數據類型相同。
FLOAT(p)語法與ODBC兼容。
· DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
壓縮的“嚴格”定點數。M是小數位數(精度)的總數,D是小數點(標度)后面的位數。小數點和(負數)的‘-’符號不包括在M中。如果D是0,則值沒有小數點或分數部分。DECIMAL整數最大位數(M)為65。支持的十進制數的最大位數(D)是30。如果D被省略, 默認是0。如果M被省略, 默認是10。
如果指定UNSIGNED,不允許負值。
所有DECIMAL列的基本計算(+,-,*,/)用65位精度完成。
· DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
是DECIMAL的同義詞。FIXED同義詞適用于與其它服務器的兼容性。