Double(9,8) 列を持つテーブルがあります。その列に PHP から 10 の値を挿入しようとすると、最終的に 9.99999999 になります。
丸め誤差は理解できますが、そもそもこれは整数です。どんな助けでも感謝します:)
これは、MySQL で使用される機能アプローチとしてのデータ損失の典型的な例です。SQL モードを強化すれば回避できます (絶対にお勧めします)。
mysql> CREATE TABLE foo (
-> bar DOUBLE(9,8)
-> );
Query OK, 0 rows affected (0.08 sec)
レガシー モードでは、データ損失が特徴です。
mysql> SET sql_mode='';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO foo (bar) VALUES (10);
Query OK, 1 row affected, 1 warning (0.06 sec)
mysql> SELECT bar FROM foo;
+------------+
| bar |
+------------+
| 9.99999999 |
+------------+
1 row in set (0.00 sec)
Strict モードでは、次のことは行われません。
mysql> SET sql_mode='TRADITIONAL';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO foo (bar) VALUES (10);
ERROR 1264 (22003): Out of range value for column 'bar' at row 1
カンマの後のすべての数字は、カンマの後に入力した金額です。奇妙な文ですが、確かに正しいものです。
これは、DBにキーを設定する方法です。