今天在使用python 库mysqldb的rawsql的时候遇到一个问题(其实并不是mysqlbean引起的)

cls.raw_sql('update {table} set available_amount=available_amount+%s, update_time=%s '
'where user_id=%s'.format(table=Points.Meta.table), amount, now, user_id)

这里我在数据库里面的available_amount字段类型是decimal(16, 2),然后这里更新的时候amount的类型也是decimal,精度同样是精确到小数点后面两位。

但是这里有个问题,在mysql下decimal如果跟string类型做加减法 会报出warning。

在很多情况下,我们使用的orm级别在数据库曝出warning的时候就会中止运行

错误复现:

mysql> update temporary set amount = amount+'0.01' where id=1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1 mysql> show warnings;
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1265 | Data truncated for column 'amount' at row 1 |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)

为什么会造成这种情况, 因为尝试在mysql里面传递带引号的数字符串会被转成double类型。使用double类型可能会丢失精度在和decimal相加的时候。所以会报出warning

这种情况只会在字符串数 会丢失精度的情况下报出,所以有时候会出现时有时无的报错信息。

所以避免这种情况的办法就是让decimal直接加浮点型,或者直接使用

cast('12.22' as decimal(16, 2))

转换成一样的类型,再相加减同样可以解决这个问题。

希望能对同样遇到坑的盆友有所帮助。

mysql 由decimal 引起的 Warning: Data truncated for column的更多相关文章

  1. Warning: Data truncated for column 'AirPress' at row 1

    /************************************************************************ * Warning: Data truncated ...

  2. Warning: Data truncated for column 'xxxx' at row 1

    The problem was that I changed the column's length only in the program.I had to do either change the ...

  3. mysql Out of range value adjusted for column导致Warning(1265)Data truncated for column 'column_name' at row 1

    今天下午,我们的一个开发来找我,说线上有个环境报了"Warning(1265)Data truncated for column 'column_name' at row 1",定 ...

  4. [MySQL学习]STRICT_ALL_TABLES相应的OUT of RANGE VALUE FOR COLUMN和DATA truncated FOR COLUMN

    版权声明:声明:本文档能够转载,须署名原作者. 作者:无为 qq:490073687 周祥兴 zhou.xiangxing210@163.com https://blog.csdn.net/Rooki ...

  5. mysql中出现的Data truncated for column

    mysql中想一个数据库中插入一条记录时,有可能因为好多原因,会出现Data truncated for column XXXXX的错误,这是因为你的数据类型的长度不一致导致的,仔细查看一下数据类型的 ...

  6. mysql出现Data truncated for column

    1.首先叙述,描述你自己的问题. 假设你想把同意为空值的勾去掉.. .恰巧数据库中的数据 processed_f 为空没有值. . . .这时候你对数据表结构做更改的时候就会出现Data trunca ...

  7. MySQL中 Data truncated for column 'xxx'解决方法

    DATA truncated FOR COLUMN 'description' AT ROW 1 1.错误再现 表中存在null字段 此时,修改表中某字段为主键 2.解决方法 不允许数据库中出现nul ...

  8. Mysql load data infile 导入数据出现:Data truncated for column

    [1]Mysql load data infile 导入数据出现:Data truncated for column .... 可能原因分析: (1)数据库表对应字段类型长度不够或修改为其他数据类型( ...

  9. mysql导入文件出现Data truncated for column 'xxx' at row 1的原因

    mysql导入文件的时候很容易出现"Data truncated for column 'xxx' at row x",其中字符串里的xxx和x是指具体的列和行数. 有时候,这是因 ...

随机推荐

  1. go标准库的学习-reflect

    参考: https://studygolang.com/pkgdoc http://c.biancheng.net/golang/concurrent/ 导入方式: import "refl ...

  2. rac添加新节点的步骤与方法(官方步骤与自我测试)

    Extending the Oracle Grid Infrastructure Home to the New NodeNow that the new node has been configur ...

  3. 虚拟机oom

    解决: 重启服务器或者增加内存

  4. Maven快照机制(SNAPSHOT)

    文章转自 http://www.cnblogs.com/EasonJim/p/6852840.html 以下引用自https://ayayui.gitbooks.io/tutorialspoint-m ...

  5. 崩 oj 1768 最大子矩阵

    描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵.比如,如下4 * 4的矩阵0 -2 -7  0 9  2 -6  2 -4  1 - ...

  6. 关于nodejs

    #!/bin/bashcd /home/software/wget https://nodejs.org/dist/v9.8.0/node-v9.8.0-linux-x64.tar.xztar -xv ...

  7. AI 线性回归

    线性回归(Linear Regression),顾名思义,输出是输入的线性函数.因为通常会附加偏置(bias)参数,所以实际是仿射函数. 参考链接: http://cs229.stanford.edu ...

  8. 【Topcoder 10107】TeamManagement

    Topcoder 10107 题意:给定一棵树,其中有些点是忠诚的,现在要选k个点,每个选择的联通块都必须包含一个忠诚的点,求包含某个点的概率. 思路:考虑树型\(dp\),\(dp(i,j,0/1, ...

  9. ImageView android:scaleType="centerCrop"

    转载地址:http://www.cnblogs.com/yejiurui/archive/2013/02/25/2931767.html 在网上查了好多资料,大致都雷同,大家都是互相抄袭的,看着很费劲 ...

  10. MongoDB的一些CURD操作

    MongoDB的一些增删改查命令操作: 官方文档参考  https://docs.mongodb.com/manual/reference/method/ https://docs.mongodb.c ...