我有一个带小数(16,2)字段的mysql表.看起来像使用另一个十进制(16,2)字段字符串的加法 *** 作可能会导致第1行问题的列x截断数据,这会在我的django项目中引发异常.
我知道该字段的乘法或除法运算会导致此问题,因为结果可能不适合十进制(16,2)定义,但加法和减法 *** 作是否相同?
我的MySQL服务器版本是5.5.37-0ubuntu0.14.04.1.您可以从下面重现此问题:
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 changedMysqL> 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: 0MysqL> update t set price = price + '0.09';query OK,1 row affected,1 warning (0.03 sec)Rows matched: 1 Changed: 1 Warnings: 1MysqL> 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)
最佳答案有两个问题:>您没有存储十进制值,您正在尝试存储字符串/ varchar,它由MysqL转换为double值,例如以下代码不会给出错误更新t set price = price 0.09; (甚至多次执行)
>无论如何,此代码给出预期警告(注释号)更新t set price = price 0.091;你可以改变它来更新t set price = price cast(0.091 as decimal(16,2));当然使用强制转换你也可以使用字符串值更新t set price = price cast(‘0.09’as decimal(16,2));@H_404_21@ 总结
以上是内存溢出为你收集整理的MySQL十进制字段’数据在第1行的第x列被截断’问题全部内容,希望文章能够帮你解决MySQL十进制字段’数据在第1行的第x列被截断’问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)