我有一个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的正确值,还是我错了?
答案 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)