天天看點

MySQL中Decimal類型和Float Double等差別

mysql中存在float,double等非标準資料類型,

也有decimal這種标準資料類型。

其差別在于,float,double等非标準類型,在db中儲存的是近似值,而decimal則以字元串的形式儲存數值。

資料定義

float(m,s) m為全長,s為小數點後長度。對于不精準的例子,網絡上很多,copy如下:

mysql> create table t1(c1 float(10,2), c3decimal(10,2));

query ok, 0 rows affected (0.02 sec)

mysql> insert into t1 values(9876543.21, 9876543.12);

query ok, 1 row affected (0.00 sec)

mysql> select * from t1;  

+------------+------------+

| c1   | c3   |

| 1234567.25 | 1234567.23 |

| 9876543.00 | 9876543.12 |

2 rows in set (0.00 sec)

再舉例: decimal(5,3)

1.2345 --- 小數點後最多3位,是以儲存可以,自動四舍五入資料截斷。

12.345 --- ok

123.45 --- 因為小數部分未滿3位,要補0.是以儲存應該123.450。是以整個位數超出了5,儲存不可。

1.2 --- 小數未滿部分補0。按照1.200儲存。

mysql> create table if not exists `decimal_test`(

-> num decimal(5,3)

-> );

query ok, 0 rows affected (0.00 sec)

mysql> insert into `decimal_test`(num)values(1.2345);

query ok, 1 row affected, 1 warning (0.00 sec)

mysql> insert into `decimal_test`(num)values(12.345);

mysql> insert into `decimal_test`(num)values(123.45);

mysql> insert into `decimal_test`(num) values(1.2);

mysql> select * from `decimal_test`;

+--------+

| num |

| 1.235 |

| 12.345 |

| 99.999 | 沒有正常儲存

| 1.200 | 末尾未滿補0

4 rows in set (0.00 sec)