數(shù)值類的數(shù)據(jù)列類型
數(shù)值型的列類型包括整型和浮點型兩大類。
數(shù)據(jù)列類型 |
存儲空間 |
描述 |
TINYINT |
1字節(jié) |
非常小的正整數(shù),帶符號:-128~127,不帶符號:0~255 |
SMALLINT |
2字節(jié) |
小整數(shù),帶符號:-32768~32767,不帶符號:0~65535 |
MEDIUMINT |
3字節(jié) |
中等大小的整數(shù),帶符號:-8388608~8388607,不帶符號:0~16777215 |
INT |
4字節(jié) |
標準整數(shù),帶符號:-2147483648~2147483647,不帶符號:0~4294967295 |
BIGINT |
8字節(jié) |
大整數(shù),帶符號:-9223372036854775808~9233372036854775807,不帶符號:0~18446744073709551615 |
FLOAT |
4字節(jié) |
單精度浮點數(shù),最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38 |
DOUBLE |
8字節(jié) |
雙精度浮點數(shù),最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308 |
DECIMAL |
M+2字節(jié) |
以字符串形式表示的浮點數(shù),它的取值范圍可變,由M和D的值決定。 |
1.?整型數(shù)據(jù)列類型
MySQL有五種整型數(shù)據(jù)列類型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它們之間的區(qū)別是取值范圍不同,存儲空間也各不相同。在整型數(shù)據(jù)列后加上UNSIGNED屬性可以禁止負數(shù),取值從0開始。
聲
明整型數(shù)據(jù)列時,我們可以為它指定個顯示寬度M(1~255),如INT(5),指定顯示寬度為5個字符,如果沒有給它指定顯示寬度,MySQL會為它指
定一個默認值。顯示寬度只用于顯示,并不能限制取值范圍和占用空間,如:INT(3)會占用4個字節(jié)的存儲空間,并且允許的最大值也不會是999,而是
INT整型所允許的最大值。
2.?浮點型數(shù)據(jù)列類型
MySQL有三種浮點型數(shù)據(jù)列類型,分別是:FLOAT,DOUBLE和DECIMAL。浮點類數(shù)據(jù)類型有一個最大可表示值和一個最小非零可表示值,最小非零可表示值決定了該類型的精確度。
MySQL 4.0.2版之后,F(xiàn)LOAT和DOUBLE都可以指定UNSIGNED屬性。當指定該屬性時,取值范圍不平移到正數(shù)區(qū)間,而只是簡單地把浮點類型的負數(shù)部份去掉。
浮
點類型也有M(1~255)和D(1~30,且不能大于M-2)。分別表示顯示寬度和小數(shù)位數(shù)。M和D在FLOAT和DOUBLE中是可選的,默認,當
MySQL版本大于3.23.6時,F(xiàn)LOAT和DOUBLE類型將被保存為硬件所支持的最大精度。DECIMAL的M和D值在MySQL3.23.6后
可選,默認D值為0,M值為10。
3.?如何選擇數(shù)值類數(shù)據(jù)列類型?
為
了節(jié)省存儲空間和提高數(shù)據(jù)庫處理效率,我們應(yīng)根據(jù)應(yīng)用數(shù)據(jù)的取值范圍來選擇一個最適合的數(shù)據(jù)列類型。如果把一個超出數(shù)據(jù)列取值范圍的數(shù)存入該列,則
MySQL就會截短該值,如:我們把99999存入SMALLINT(3)數(shù)據(jù)列里,因為SMALLINT(3)的取值范圍是-32768~32767,
所以就會被截短成32767存儲。顯示寬度3不會影響數(shù)值的存儲。只影響顯示。
對于浮點數(shù)據(jù)列,存入的數(shù)值會被該列定義的小數(shù)位進行四舍五入。如把一個1.234存入FLOAT(6.1)數(shù)據(jù)列中,結(jié)果是1.2。
DECIMAL
與FLOAT和DOUBLE的區(qū)別是:DECIMAL類型的值是以字符串的形式被儲存起來的,它的小數(shù)位數(shù)是固定的。它的優(yōu)點是,不會象FLOAT和
DOUBLE類型數(shù)據(jù)列那樣進行四舍五入而產(chǎn)生誤差,所以很適合用于財務(wù)計算;而它的缺點是:由于它的存儲格式不同,CPU不能對它進行直接運算,從而影
響運算效率。DECIMAL(M,D)總共要占用M+2個字節(jié)。
4.?數(shù)值類數(shù)據(jù)列的屬性
-
ZEROFILL屬性適用于所有數(shù)值類數(shù)據(jù)列類型,作用是,如果數(shù)值的寬度小于定義的顯示寬度,則在數(shù)值前填充0。
-
UNSIGNED屬性不允許數(shù)據(jù)列出現(xiàn)負數(shù)。
-
AUTO_INCREMENT屬性可生成獨一無二的數(shù)字序列。只對整數(shù)類的數(shù)據(jù)列有效。
-
NULL和NOT NULL屬性設(shè)置數(shù)據(jù)列是否可為空。
-
DEFAULT屬性可為數(shù)據(jù)列指定默認值。