MySQL champ décimal Données tronquées pour la colonne x à la ligne 1 problème de

J'ai une table mysql avec une décimale(16,2). Semble que l'opération d'addition avec un chiffre après la virgule(16,2) champ de chaîne peut provoquer la Data truncated for column x at row 1 question, qui soulève une exception dans mon projet django.

Je suis conscient de la multiplication ou de la division de fonctionnement de ce champ qui peut provoquer ce problème car le résultat est probablement pas adaptée au format décimal(16,2) de la définition, mais ne l'addition et de la soustraction de l'opération de la même manière?

Mon serveur MySQL version est 5.5.37-0ubuntu0.14.04.1. Vous pouvez reproduire ce problème du soufflet:

mysql> drop database test;
Query OK, 1 row affected (0.10 sec)

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> use test;
Database changed
mysql> create table t(price decimal(16,2));
Query OK, 0 rows affected (0.16 sec)

mysql> insert into t values('2004.74');
Query OK, 1 row affected (0.03 sec)

mysql> select * from t;
+---------+
| price   |
+---------+
| 2004.74 |
+---------+
1 row in set (0.00 sec)

mysql> update t set price = price + '0.09';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update t set price = price + '0.09';
Query OK, 1 row affected, 1 warning (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 1

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

mysql> select * from t;
+---------+
| price   |
+---------+
| 2004.92 |
+---------+
1 row in set (0.00 sec)

OriginalL'auteur yc. | 2014-05-29