mysql的數(shù)字類型是:INT類型、TINYINT類型、SMALLINT類型、MEDIUMINT類型、BIGINT類型、FLOAT類型、DOUBLE類型、DECIMAL類型。
(推薦教程:mysql視頻教程)
mysql的數(shù)字類型
1、mysql整數(shù)類型
整數(shù)類型又稱數(shù)值型數(shù)據(jù),數(shù)值型數(shù)據(jù)類型主要用來存儲(chǔ)數(shù)字。
MySQL 提供了多種數(shù)值型數(shù)據(jù)類型,不同的數(shù)據(jù)類型提供不同的取值范圍,可以存儲(chǔ)的值范圍越大,所需的存儲(chǔ)空間也會(huì)越大。
MySQL 主要提供的整數(shù)類型有 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,其屬性字段可以添加 AUTO_INCREMENT 自增約束條件。下表中列出了 MySQL 中的數(shù)值類型。
從上表中可以看到,不同類型的整數(shù)存儲(chǔ)所需的字節(jié)數(shù)不相同,占用字節(jié)數(shù)最小的是 TINYINT 類型,占用字節(jié)最大的是 BIGINT 類型,占用的字節(jié)越多的類型所能表示的數(shù)值范圍越大。
根據(jù)占用字節(jié)數(shù)可以求出每一種數(shù)據(jù)類型的取值范圍。例如,TINYINT 需要 1 個(gè)字節(jié)(8bit)來存儲(chǔ),那么 TINYINT 無符號(hào)數(shù)的最大值為 28-1,即 255;TINYINT 有符號(hào)數(shù)的最大值為 27-1,即 127。其他類型的整數(shù)的取值范圍計(jì)算方法相同,如下表所示。
提示:顯示寬度和數(shù)據(jù)類型的取值范圍是無關(guān)的。顯示寬度只是指明 MySQL 最大可能顯示的數(shù)字個(gè)數(shù),數(shù)值的位數(shù)小于指定的寬度時(shí)會(huì)由空格填充。如果插入了大于顯示寬度的值,只要該值不超過該類型整數(shù)的取值范圍,數(shù)值依然可以插入,而且能夠顯示出來。例如,year 字段插入 19999,當(dāng)使用 SELECT 查詢?cè)摿兄档臅r(shí)候,MySQL 顯示的將是完整的帶有 5 位數(shù)字的 19999,而不是 4 位數(shù)字的值。
其他整型數(shù)據(jù)類型也可以在定義表結(jié)構(gòu)時(shí)指定所需的顯示寬度,如果不指定,則系統(tǒng)為每一種類型指定默認(rèn)的寬度值。
不同的整數(shù)類型有不同的取值范圍,并且需要不同的存儲(chǔ)空間,因此應(yīng)根據(jù)實(shí)際需要選擇最合適的類型,這樣有利于提高查詢的效率和節(jié)省存儲(chǔ)空間。
2、mysql小數(shù)類型
MySQL 中使用浮點(diǎn)數(shù)和定點(diǎn)數(shù)來表示小數(shù)。
浮點(diǎn)類型有兩種,分別是單精度浮點(diǎn)數(shù)(FLOAT)和雙精度浮點(diǎn)數(shù)(DOUBLE);定點(diǎn)類型只有一種,就是 DECIMAL。
浮點(diǎn)類型和定點(diǎn)類型都可以用(M, D)來表示,其中M稱為精度,表示總共的位數(shù);D稱為標(biāo)度,表示小數(shù)的位數(shù)。
浮點(diǎn)數(shù)類型的取值范圍為 M(1~255)和 D(1~30,且不能大于 M-2),分別表示顯示寬度和小數(shù)位數(shù)。M 和 D 在 FLOAT 和DOUBLE 中是可選的,F(xiàn)LOAT 和 DOUBLE 類型將被保存為硬件所支持的最大精度。DECIMAL 的默認(rèn) D 值為 0、M 值為 10。
下表中列出了 MySQL 中的小數(shù)類型和存儲(chǔ)需求。
DECIMAL 類型不同于 FLOAT 和 DOUBLE。DOUBLE 實(shí)際上是以字符串的形式存放的,DECIMAL 可能的最大取值范圍與 DOUBLE 相同,但是有效的取值范圍由 M 和 D 決定。如果改變 M 而固定 D,則取值范圍將隨 M 的變大而變大。
從上表中可以看到,DECIMAL 的存儲(chǔ)空間并不是固定的,而由精度值 M 決定,占用 M+2 個(gè)字節(jié)。
FLOAT 類型的取值范圍如下:
-
有符號(hào)的取值范圍:-3.402823466E+38~-1.175494351E-38。
-
無符號(hào)的取值范圍:0 和 -1.175494351E-38~-3.402823466E+38。
DOUBLE 類型的取值范圍如下:
-
有符號(hào)的取值范圍:-1.7976931348623157E+308~-2.2250738585072014E-308。
-
無符號(hào)的取值范圍:0 和 -2.2250738585072014E-308~-1.7976931348623157E+308。
提示:不論是定點(diǎn)還是浮點(diǎn)類型,如果用戶指定的精度超出精度范圍,則會(huì)四舍五入進(jìn)行處理。
FLOAT 和 DOUBLE 在不指定精度時(shí),默認(rèn)會(huì)按照實(shí)際的精度(由計(jì)算機(jī)硬件和操作系統(tǒng)決定),DECIMAL 如果不指定精度,默認(rèn)為(10,0)。
浮點(diǎn)數(shù)相對(duì)于定點(diǎn)數(shù)的優(yōu)點(diǎn)是在長(zhǎng)度一定的情況下,浮點(diǎn)數(shù)能夠表示更大的范圍;缺點(diǎn)是會(huì)引起精度問題。
最后再?gòu)?qiáng)調(diào)一下:在 MySQL 中,定點(diǎn)數(shù)以字符串形式存儲(chǔ),在對(duì)精度要求比較高的時(shí)候(如貨幣、科學(xué)數(shù)據(jù)),使用 DECIMAL 的類型比較好,另外兩個(gè)浮點(diǎn)數(shù)進(jìn)行減法和比較運(yùn)算時(shí)也容易出問題,所以在使用浮點(diǎn)數(shù)時(shí)需要注意,并盡量避免做浮點(diǎn)數(shù)比較。