1. 程式人生 > >MySQL DECIMAL資料型別

MySQL DECIMAL資料型別

同事問MySQL資料型別DECIMAL(N,M)中N和M分別表示什麼含義,M不用說,顯然是小數點後的小數位數,但這個N究竟是小數點之前的最大位數,還是加上小數部分後的最大位數?這個還真記不清了。於是乎,建立測試表驗證了一番,結果如下:

測試表,seller_cost欄位定義為decimal(14,2)

CREATE TABLE `test_decimal` (
  `id` int(11) NOT NULL,
  `seller_cost` decimal(14,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

起初,表中內容為空

mysql> select * from test_decimal;
Empty set (0.00 sec)

插入整數部分長度為14的數字,報超出列範圍的錯誤

mysql> insert into test_decimal(id,seller_cost) values(1,12345678901234);
ERROR 1264 (22003): Out of range value for column 'seller_cost' at row 1

插入整數部分長度為12的數字,可以正確插入

mysql> insert into test_decimal(id,seller_cost)
values(1,123456789012); Query OK, 1 row affected (0.00 sec)

查詢表,發現插入的整數值末尾被MySQL補了兩位小數“.00”

mysql> select * from test_decimal;
+----+-----------------+
| id | seller_cost     |
+----+-----------------+
|  1 | 123456789012.00 |
+----+-----------------+
1 row in set (0.00 sec)

繼續插入整數部分12位,小數部分5位的數字,可以成功插入,但是有警告,警告表明小數部分發生了截斷,被擷取成了兩位小數

mysql> insert into test_decimal(id,seller_cost) values(1,123456789012.12345);
Query OK, 1 row affected, 1 warning (0.00 sec)

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

mysql> select * from test_decimal;
+----+-----------------+
| id | seller_cost     |
+----+-----------------+
|  1 | 123456789012.00 |
|  1 | 123456789012.12 |
+----+-----------------+
2 rows in set (0.00 sec)

縮小整數部分的長度為2,小數部分的長度繼續保持為5,可以成功插入,但小數部分被截斷為兩位。

mysql> insert into test_decimal(id,seller_cost) values(1,12.12345);
Query OK, 1 row affected, 1 warning (0.00 sec)

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

mysql> select * from test_decimal;
+----+-----------------+
| id | seller_cost     |
+----+-----------------+
|  1 | 123456789012.00 |
|  1 | 123456789012.12 |
|  1 |           12.12 |
+----+-----------------+
3 rows in set (0.00 sec)

繼續插入一個小數部分不足兩位的數字,可正確插入,且小數部分被自動補全到兩位。

mysql> insert into test_decimal(id,seller_cost) values(1,12.1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test_decimal;
+----+-----------------+
| id | seller_cost     |
+----+-----------------+
|  1 | 123456789012.00 |
|  1 | 123456789012.12 |
|  1 |           12.12 |
|  1 |           12.10 |
+----+-----------------+
4 rows in set (0.00 sec)

綜上所述,DECIMAL(N,M)中M值的是小數部分的位數,若插入的值未指定小數部分或者小數部分不足M位則會自動補到M位小數,若插入的值小數部分超過了M為則會發生截斷,擷取前M位小數。N值得是整數部分加小數部分的總長度,也即插入的數字整數部分不能超過N-M位,否則不能成功插入,會報超出範圍的錯誤。

相關推薦

mysql decimal資料型別轉換

最近在工作遇到資料庫中存的資料型別是: decimal(14,4) 遇到的問題是: 當我使用python 讀取到記憶體中時,總是帶著 decimal字元, 再寫入其它mysql表中時,資料型別為int型,導致資料入庫不成功. import pymysql # 建立資

MySQL DECIMAL資料型別

同事問MySQL資料型別DECIMAL(N,M)中N和M分別表示什麼含義,M不用說,顯然是小數點後的小數位數,但這個N究竟是小數點之前的最大位數,還是加上小數部分後的最大位數?這個還真記不清了。於是乎,建立測試表驗證了一番,結果如下: 測試表,seller_c

4 Mysql資料型別

 一 1.1 建立表 CREATE TABLE t1( id1 int, id2 INT(5) ); DESC t1;     2  插入資料檢視 INSERT INTO t1 VALUES(1,1); SELECT * from t1;

mysql java資料型別對照表

Java資料型別和MySql資料型別對應表 java mysql 資料型別對照 型別名稱 顯示長度 資料庫型別 JAVA型別 J

mysql資料型別和select語句(group by、 limit)

mysql之資料型別的理解 mysql資料型別之整形 mysql資料型別之浮點型 mysql資料型別之日期時間型 mysql資料型別之字元型 刪除記錄(單表刪除) delete from 表單 where id=5 select

mysql基本資料型別和約束條件

mysql基本資料型別 1.建立表的完整語法 create table 表名(欄位1 型別[(寬度) 約束條件],欄位2 型別[(寬度) 約束條件]); # 注意:1.在同一張表中,欄位名不能相同;2.寬度和約束條件可選,欄位名和型別是必須的; # 型別:使用限制欄位必須以什麼樣的資料型別傳值 # 約束條

mysql資料庫----資料型別

一、數值型別 1、整型 整數型別:TINYINT SMALLINT MEDIUMINT INT BIGINT 我們完全沒必要為整數型別指定顯示寬度,使用預設的就可以了 預設的顯示寬度,都是在最大值的基礎上加1   2、浮點型  浮點型:FLOAT DOUBLE 定點數:

mysql資料型別int、bigint、smallint 和 tinyint取值範圍

目錄 int 註釋 使用整數資料的精確數字資料型別。 bigint         從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型資料(所有數字)。儲存大

mysql資料型別選擇

一Mysql 資料型別選擇 ​​​​​​​1.1 Char與varchar 由於char是固定長度的,所以存取速度比varchar快。缺點是浪費儲存空間,程式需要對行尾進行處理,所以對那些長度變化不大,並且對查詢速度有較高要求的資料可以通過char來存取。當然這個也是由

mysql常用資料型別

常用資料型別:   數值型別: bit, boolean tinyint(對應java的byte) smallint(對應java的short), int, bigint(對應java的long) float, double 。 文字、二進位制型別: c

mysql資料型別之日期時間型別

常用的日期時間型別: DATE ;TIME; DATETIME ;TIMESTAMP 。 (1)根據實際需要選擇滿足應用的最小儲存的日期型別 (2)記錄年份比較久遠,最好要使用DATETIME。因為TIMESTAMP表示的日期範圍要短很多。 (3)如果讓不同的時區保持

資料庫基礎02——MySQL常用資料型別

資料庫基礎02——MySQL常用資料型別 在這裡宣告一下 mysql 5.5.的文件,如果公司確定用mysql,直接看文件最詳細 https://dev.mysql.com/doc/refman/5.5/en/ mysql主要的資料型別: 1、串資料型別 2、數值資料型別

Mysql資料型別

MySQL資料型別可分為3類:數值型別、日期和時間型別、字串(字元)型別 數值型別: tinyint[(M)] [UNSIGNED] [ZEROFILL] //M(預設值) 4 非常小整數值 smallint[(M)] [UNS

MySQL筆記——資料型別

MySQL支援的資料型別     MySQL提供了多種資料型別,主要包括數值型、字串型別、日期和時間型別。可以在MySQL的幫助文件中,查閱當前MySQL版本所支援的資料型別,以及資料型別的詳細使用說明。 開啟MySQL命令視窗,輸入命令: ? data types;

MySQL分鐘資料型別的區別

char、varchar、text、ntext、 bigint、int、smallint、tinyint和bit的區別及資料庫的資料型別 Varchar 對每個英文(ASCII)字元都佔用2個位元組,對一個漢字也只佔用兩個位元組 char 對英文(ASCII)字元佔用1個位元組,對一個漢字佔用2個位

MySQL日期資料型別、相互轉換、處理函式總結

1. MySQL的日期主要有以下三種資料型別 資料型別 示例 備註 date 2017-01-01 day級 timestamp 2017-01-01 00:00:00 second級 bigint 1483200000000 時間戳(毫秒) 2.三種資料型別的相互轉換 (

MySQL系列-使用JDBC操作MySQL常用資料型別

那麼這些資料對應的java型別是那些呢,又該如何使用jdbc進行操作呢?1.插入和獲取日期型別表的設計如下表中資料如下:如何從結果集中獲取這些型別的資料呢?第一個date型別,我們可以使用getDate()方法獲取。例如:Date d = resultSet.getDate(

mysql 資料庫快速入門 MySQL資料型別

目錄 MySQL 資料型別 數值型別 字串(字元)型別 日期/時間型別 MySQL 資料型別 MySQL支援所有標準SQL數值資料型別。 資料欄位的型別對資料庫的優化是非常重要的,合理的使用資料型別,對資料庫的真來說都是有益的。 MySQL支援多種型別,大致可以分

Mysql學習筆記(5)--mysql資料型別

1、float、dounle和decimal三者之間的不同 對於小數的表示,MySQL 分為兩種方式:浮點數和定點數。浮點數包括 float(單精度)和double(雙精度),而定點數則只有decimal一種表示。定點數在MySQL內部以字串形式存放,比浮點數更精確,適合用來表示貨幣等精度高

mysql資料型別的 大小及長度

數字型 型別 大小 範圍(有符號) 範圍(無符號) 用途 TINYINT 1 位元組 (-128,127) (0,255) 小整