加入收藏 | 设为首页 | 会员中心 | 我要投稿 台州站长网 (https://www.0576zz.cn/)- 边缘计算、中间件、数据处理、数据分析、智能存储!
当前位置: 首页 > 数据库 > MySql > 正文

MySQL十进制字段’数据在第1行的第x列被截断’问题

发布时间:2021-01-11 08:09:18 所属栏目:MySql 来源:互联网
导读:我有一个带小数(16,2)字段的mysql表.看起来像使用另一个十进制(16,2)字段字符串的加法操作可能会导致第1行问题的列x截断数据,这会在我的django项目中引发异常.我知道该字段的乘法或除法运算会导致此问题,因为结果可能不适合十进制(16,2)定义,但加法和减法操作

我有一个带小数(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 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)
最佳答案 有两个问题:

>您没有存储十进制值,您正在尝试存储字符串/ 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));

(编辑:台州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读