Mysql ERROR 1264(22003)

时间:2018-02-08 11:39:14

标签: mysql bash

我有一个bash脚本,它将值存储在mysql数据库中。对于一个值,我得到一个ERROR 1264(22003)。 脚本中的行: INSERT INTO $TABLE2 (datetime, actualtemp, tempstate) VALUES ("$datetime", "$actual_temp", "$set_temp_state");

$actual_temp = 21.0的价值 专栏' actualtemp'是DECIMAL类型,值/长度为2,1 错误: ERROR 1264 (22003) at line 2: Out of range value for column 'actualtemp' at row 1

我有一个类似的行:INSERT INTO $TABLE1 (datetime, temperature) VALUES ("$datetime", "$temp");其中$temp = 2.2,列temperature也是DECIMAL,值/长度为2,1。这条线可以正常工作。

完整脚本: mysql $DB_NAME << EOF INSERT INTO $TABLE1 (datetime, temperature) VALUES ("$datetime", "$temp"); INSERT INTO $TABLE2 (datetime, actualtemp, tempstate) VALUES ("$datetime", "$actual_temp", "$set_temp_state"); EOF

21.0应该是DECIMAL 2,1的正确值,还是我错了?

2 个答案:

答案 0 :(得分:2)

您应该更改列的M和D以接受大于9.9的数字 更改为DECIMAL(3,1)接受您的值,最大数字将为99.9 您应该考虑(3,1)表示您有3位数,其中1位是小数部分。因此整数部分剩余2位数。

请查看此文档:https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
并且要点是M是最大位数 无论如何我建议使用float而不是decimal,因为decimal需要比float更多的空间。除非您想要精确表示。

答案 1 :(得分:1)

您的十进制变量未正确定义,actualtemp decimal(2,1)您有1个整数位的空间和小数部分的1位数。请考虑阅读此link

中的DECIMAL定义

如果你插入actualtemp值2.123123,它就会失败,虽然它会被舍入,但如果你插入10.0,它将失败,ERROR 1264 (22003): Out of range value for column

考虑使用更多数字修改列定义,我输入3,您可以将其更改为您需要的数字:

ALTER TABLE YOURDATABASE.YOURTABLE MODIFY actualtemp DECIMAL(3,1)