首頁  >  文章  >  資料庫  >  mysql小數用什麼類型

mysql小數用什麼類型

青灯夜游
青灯夜游原創
2021-12-01 16:41:0033425瀏覽

mysql小數可用的類型:1、FLOAT類型,可以儲存單精度浮點數;2、DOUBLE類型,可以儲存雙精度浮點數;3、DECIMAL類型,用於儲存精確的數值,例如會計系統中的貨幣數據。

mysql小數用什麼類型

本教學操作環境: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 中的小數型別和儲存需求。

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資料類型用於保留準確精確度的列,例如會計系統中的貨幣資料。

要定義資料類型為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型別也具有UNSIGNEDZEROFILL屬性。如果使用UNSIGNED屬性,則DECIMAL UNSIGNED的欄位將不接受負值。

如果使用ZEROFILL,MySQL會將顯示值填入0以顯示由列定義指定的寬度。另外,如果我們對DECIMAL列使用ZERO FILL,MySQL將自動將UNSIGNED屬性加入到列。

以下範例使用DECIMAL資料類型定義的一個叫作amount的欄位。

amount DECIMAL(6,2);

在此範例中,amount列最多可以儲存6位元數字,小數位數為2位元; 因此,amount列的範圍是從-9999.999999.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的新表,其中包含三列:iddescriptioncost

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(&#39;Bicycle&#39;, 500.34),(&#39;Seat&#39;,10.23),(&#39;Break&#39;,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(&#39;test&#39;, -100.11);
提示:
[SQL]INSERT INTO test_order(description,cost)
VALUES(&#39;test&#39;, -100.11)

[Err] 1264 - Out of range value for column &#39;cost&#39; at row 1

其它插入测试结论:

当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。

若数值在其取值范围之外,则直接报Out of range value错误。

【相关推荐:mysql视频教程

以上是mysql小數用什麼類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn