mysql小數可用的類型:1、FLOAT類型,可以儲存單精度浮點數;2、DOUBLE類型,可以儲存雙精度浮點數;3、DECIMAL類型,用於儲存精確的數值,例如會計系統中的貨幣數據。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
MySQL 中使用浮點數和定點數來表示小數。
浮點類型有兩種,分別是單精度浮點數(FLOAT)和雙精度浮點數(DOUBLE);定點類型只有一種,就是 DECIMAL。
浮點類型和定點類型都可以用(M, D)來表示,其中M稱為精度,表示總共的位數;D稱為標度,表示小數的位數。
浮點數類型的值範圍為 M(1~255)和 D(1~30,且不能大於 M-2),分別表示顯示寬度和小數位數。 M 和 D 在 FLOAT 和DOUBLE 中是可選的,FLOAT 和 DOUBLE 類型將被保存為硬體所支援的最大精度。 DECIMAL 的預設 D 值為 0、M 值為 10。
下表中列出了 MySQL 中的小數型別和儲存需求。
DECIMAL 類型不同於 FLOAT 和 DOUBLE。 DOUBLE 實際上是以字串的形式存放的,DECIMAL 可能的最大取值範圍與 DOUBLE 相同,但是有效的取值範圍由 M 和 D 決定。如果改變 M 而固定 D,則取值範圍將隨 M 的變大而變大。
從上表可以看到,DECIMAL 的儲存空間並不是固定的,而由精確度值 M 決定,佔用 M 2 個位元組。
FLOAT 類型的值範圍如下:
有符號的值範圍:-3.402823466E 38~-1.175494351E-38。
無符號的值範圍:0 與 -1.175494351E-38~-3.402823466E 38。
DOUBLE 類型的值範圍如下:
#有符號的值範圍:-1.7976931348623157E 308~ -2.2250738585072014E-308。
無符號的值範圍:0 與 -2.2250738585072014E-308~-1.7976931348623157E 308。
注意:不論是定點還是浮點類型,如果使用者指定的精度超出精度範圍,則會四捨五入進行處理。
FLOAT 和 DOUBLE 在不指定精度時,預設會依照實際的精度,DECIMAL 如果不指定精度,預設為(10,0)。
浮點數相對於定點數的優點是在長度一定的情況下,浮點數能夠表示更大的範圍;缺點是會造成精確度問題。
DECIMAL
資料類型用於在資料庫中儲存精確的數值。我們經常將DECIMAL
資料類型用於保留準確精確度的列,例如會計系統中的貨幣資料。
要定義資料類型為DECIMAL
的列,請使用下列語法:
column_name DECIMAL(P,D);
在上面的語法:
P
是表示有效數字數的精確度。 P
範圍為1〜65
。 D
是表示小數點後的位數。 D
的範圍是0
~30
。 MySQL要求D
小於或等於()<code>P
。
DECIMAL(P,D)
表示列可以儲存D
位元小數的P
位數。十進制列的實際範圍取決於精度和刻度。
與INT資料型別一樣,DECIMAL
型別也具有UNSIGNED
和ZEROFILL
屬性。如果使用UNSIGNED
屬性,則DECIMAL UNSIGNED
的欄位將不接受負值。
如果使用ZEROFILL
,MySQL會將顯示值填入0
以顯示由列定義指定的寬度。另外,如果我們對DECIMAL
列使用ZERO FILL
,MySQL將自動將UNSIGNED
屬性加入到列。
以下範例使用DECIMAL
資料類型定義的一個叫作amount
的欄位。
amount DECIMAL(6,2);
在此範例中,amount
列最多可以儲存6
位元數字,小數位數為2
位元; 因此,amount
列的範圍是從-9999.99
到9999.99
。
MySQL允許使用下列語法:
column_name DECIMAL(P);
這相當於:
column_name DECIMAL(P,0);
在這種情況下,列不包含小數部分或小數點。
此外,我們甚至可以使用以下語法。
column_name DECIMAL;
在這種情況下,P
的預設值為10
。
MySQL DECIMAL儲存
MySQL分别为整数和小数部分分配存储空间。 MySQL使用二进制格式存储DECIMAL
值。它将9
位数字包装成4
个字节。
对于每个部分,需要4
个字节来存储9
位数的每个倍数。剩余数字所需的存储如下表所示:
剩余数字 | 位 |
---|---|
0 | 0 |
1–2 | 1 |
3–4 | 2 |
5–6 | 3 |
7-9 | 4 |
例如,DECIMAL(19,9)
对于小数部分具有9
位数字,对于整数部分具有19
位= 10
位数字,小数部分需要4
个字节。 整数部分对于前9
位数字需要4
个字节,1
个剩余字节需要1
个字节。DECIMAL(19,9)
列总共需要9
个字节。
MySQL DECIMAL数据类型和货币数据
经常使用DECIMAL
数据类型的货币数据,如价格,工资,账户余额等。如果要设计一个处理货币数据的数据库,则可参考以下语法 -
amount DECIMAL(19,2);
但是,如果您要遵守公认会计原则(GAAP)规则,则货币栏必须至少包含4
位小数,以确保舍入值不超过$0.01
。 在这种情况下,应该定义具有4
位小数的列,如下所示:
amount DECIMAL(19,4);
MySQL DECIMAL数据类型示例
首先,创建一个名为test_order
的新表,其中包含三列:id
,description
和cost
。
CREATE TABLE test_order ( id INT AUTO_INCREMENT PRIMARY KEY, description VARCHAR(255), cost DECIMAL(19,4) NOT NULL );
第二步,将资料插入test_order表。
INSERT INTO test_order(description,cost) VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21);
第三步,从test_order表查询数据。
SELECT * from test_order
第四步,更改cost
列以包含ZEROFILL
属性。
ALTER TABLE test_order MODIFY cost DECIMAL(19,4) zerofill;
第五步,再次查询test_order表。
SELECT * from test_order
查询结果:
如上所见,在输出值中填充了许多零。
因为zerofill,当我们插入负值会报错:
INSERT INTO test_order(description,cost) VALUES('test', -100.11); 提示: [SQL]INSERT INTO test_order(description,cost) VALUES('test', -100.11) [Err] 1264 - Out of range value for column 'cost' at row 1
其它插入测试结论:
当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。
若数值在其取值范围之外,则直接报Out of range value错误。
【相关推荐:mysql视频教程】
以上是mysql小數用什麼類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!