MySQL數(shù)據(jù)類(lèi)型DECIMAL用法

前言:?

創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供臨夏網(wǎng)站建設(shè)、臨夏做網(wǎng)站、臨夏網(wǎng)站設(shè)計(jì)、臨夏網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、臨夏企業(yè)網(wǎng)站模板建站服務(wù),10余年臨夏做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

當(dāng)我們需要存儲(chǔ)小數(shù),并且有精度要求,比如存儲(chǔ)金額時(shí),通常會(huì)考慮使用DECIMAL字段類(lèi)型,可能大部分同學(xué)只是對(duì)DECIMAL類(lèi)型略有了解,其中的細(xì)節(jié)還不甚清楚,本篇文章將從零開(kāi)始,為你講述DECIMAL字段類(lèi)型的使用場(chǎng)景及方法。

1.DECIMAL類(lèi)型簡(jiǎn)介

DECIMAL從MySQL 5.1引入,列的聲明語(yǔ)法是DECIMAL(M,D)。NUMERIC與DECIMAL同義,如果字段類(lèi)型定義為NUMERIC,則將自動(dòng)轉(zhuǎn)成DECIMAL。

對(duì)于聲明語(yǔ)法DECIMAL(M,D),自變量的值范圍如下:

  • M是最大位數(shù)(精度),范圍是1到65。可不指定,默認(rèn)值是10。
  • D是小數(shù)點(diǎn)右邊的位數(shù)(小數(shù)位)。范圍是0到30,并且不能大于M,可不指定,默認(rèn)值是0。

例如字段 salary DECIMAL(5,2),能夠存儲(chǔ)具有五位數(shù)字和兩位小數(shù)的任何值,因此可以存儲(chǔ)在salary列中的值的范圍是從-999.99到999.99。

2.DECIMAL使用實(shí)戰(zhàn)

下面我們將創(chuàng)建測(cè)試表來(lái)驗(yàn)證DECIMAL字段類(lèi)型的使用:

# 創(chuàng)建具有DECIMAL字段的表 驗(yàn)證decimal默認(rèn)是decimal(10,0)
mysql> create table decimal_tb (col1 decimal,col2 decimal(5,2));
Query OK, 0 rows affected (0.04 sec)

mysql> show create table decimal_tb\G
*************************** 1. row ***************************
       Table: decimal_tb
Create Table: CREATE TABLE `decimal_tb` (
  `col1` decimal(10,0) DEFAULT NULL,
  `col2` decimal(5,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

# 插入數(shù)據(jù)測(cè)試 
# 結(jié)論:超出存儲(chǔ)范圍會(huì)報(bào)錯(cuò),小數(shù)位不足會(huì)自動(dòng)補(bǔ)0,首位數(shù)字為0自動(dòng)忽略,小數(shù)位超出會(huì)截?cái)?并按四舍五入處理。
mysql> insert into decimal_tb (col1,col2) values (100,100);
Query OK, 1 row affected (0.05 sec)

mysql> insert into decimal_tb (col2) values (1.23);
Query OK, 1 row affected (0.01 sec)

mysql> insert into decimal_tb (col2) values (10.2);
Query OK, 1 row affected (0.01 sec)

mysql> insert into decimal_tb (col2) values (09.9);
Query OK, 1 row affected (0.01 sec)

mysql> select * from decimal_tb;
+------+--------+
| col1 | col2   |
+------+--------+
|  100 | 100.00 |
| NULL |   1.23 |
| NULL |  10.20 |
| NULL |   9.90 |
+------+--------+
4 rows in set (0.00 sec)

mysql> insert into decimal_tb (col2) values (9999);
ERROR 1264 (22003): Out of range value for column 'col2' at row 1

mysql> insert into decimal_tb (col2) values (12.233); 
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+-------+------+-------------------------------------------+
| Level | Code | Message                                   |
+-------+------+-------------------------------------------+
| Note  | 1265 | Data truncated for column 'col2' at row 1 |
+-------+------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> insert into decimal_tb (col2) values (12.2300);
Query OK, 1 row affected (0.01 sec)

# 變量范圍測(cè)試
# 結(jié)論:M范圍是1到65,D范圍是0到30,且D不大于M
mysql> alter table decimal_tb add column col3 decimal(6,6);
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table decimal_tb add column col4 decimal(6,7); 
ERROR 1427 (42000): For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'col4').

mysql> alter table decimal_tb add column col4 decimal(65,2);
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table decimal_tb add column col4 decimal(66,2);
ERROR 1426 (42000): Too-big precision 66 specified for 'col4'. Maximum is 65.

mysql> alter table decimal_tb add column col5 decimal(60,30); 
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table decimal_tb add column col6 decimal(60,31);
ERROR 1425 (42000): Too big scale 31 specified for column 'col6'. Maximum is 30.
3.DECIMAL使用總結(jié)

上面的內(nèi)容從實(shí)戰(zhàn)出發(fā),介紹了DECIMAL類(lèi)型的使用方法及注意事項(xiàng),你可能也知道float、double這些浮點(diǎn)數(shù)類(lèi)型,這兩個(gè)同樣可以存儲(chǔ)小數(shù),但這里不過(guò)多介紹,只是提醒大家float、double類(lèi)型無(wú)法確保精度,很容易產(chǎn)生誤差,特別是在求和計(jì)算的時(shí)候,所有當(dāng)存儲(chǔ)小數(shù),特別是涉及金額時(shí)推薦使用DECIMAL類(lèi)型。這里總結(jié)下使用DECIMAL應(yīng)該注意的事項(xiàng):

  • DECIMAL(M,D)中,M范圍是1到65,D范圍是0到30。
  • M默認(rèn)為10,D默認(rèn)為0,D不大于M。
  • DECIMAL(5,2)可存儲(chǔ)范圍是從-999.99到999.99,超出存儲(chǔ)范圍會(huì)報(bào)錯(cuò)。
  • 存儲(chǔ)數(shù)值時(shí),小數(shù)位不足會(huì)自動(dòng)補(bǔ)0,首位數(shù)字為0自動(dòng)忽略。
  • 小數(shù)位超出會(huì)截?cái)啵a(chǎn)生告警,并按四舍五入處理。
  • 使用DECIMAL字段時(shí),建議M,D參數(shù)手動(dòng)指定,并按需分配。

總結(jié):?

本文比較簡(jiǎn)單實(shí)用,通讀下來(lái),你大概會(huì)明白DECIMAL字段的使用場(chǎng)景及注意事項(xiàng),其實(shí)對(duì)于常見(jiàn)的字段類(lèi)型,我們只需要了解其使用場(chǎng)景及注意事項(xiàng)即可,當(dāng)我們建表時(shí),能夠快速選出合適的字段類(lèi)型才是我們的目的,比如當(dāng)我們需要存儲(chǔ)小數(shù)時(shí),能夠使用DECIMAL類(lèi)型并且根據(jù)業(yè)務(wù)需要選擇合適的精度,這樣我們的工作將很容易開(kāi)展下去。

標(biāo)題名稱(chēng):MySQL數(shù)據(jù)類(lèi)型DECIMAL用法
本文網(wǎng)址:http://bm7419.com/article6/pcecog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、定制網(wǎng)站、品牌網(wǎng)站制作企業(yè)網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管