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)