3

Double(9,8) 列を持つテーブルがあります。その列に PHP から 10 の値を挿入しようとすると、最終的に 9.99999999 になります。

丸め誤差は理解できますが、そもそもこれは整数です。どんな助けでも感謝します:)

4

5 に答える 5

4

これは、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
于 2013-10-09T08:24:19.187 に答える
0

カンマの後のすべての数字は、カンマの後に入力した金額です。奇妙な文ですが、確かに正しいものです。

これは、DBにキーを設定する方法です。

于 2013-10-09T08:24:32.617 に答える