【问题标题】:Mysql ERROR 1264 (22003)Mysql 错误 1264 (22003)
【发布时间】:2018-02-08 11:39:14
【问题描述】:

我有一个将值存储在 mysql 数据库中的 bash 脚本。对于一个值,我得到一个错误 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 也是十进制值/长度为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 的正确值,还是我错了?

【问题讨论】:

    标签: mysql bash


    【解决方案1】:

    您应该更改列的 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 是最大位数。
    无论如何,我建议使用浮点数而不是十进制数,因为十进制需要比浮点数更多的空间。除非您想要精确的表示。

    【讨论】:

    • 我要试试...更新:仍然是同样的错误,对于 DECIMAL (9,9) 和 DECIMAL (3.1) 更改为 FLOAT 不会改变任何事情。
    • 您的最新添加成功了!对于十进制,我不得不将其更改为 65,9,因为 65 是最大值(我收到一条错误消息)。非常感谢!
    • @wtrdk 您应该考虑 (3,1) 意味着您有 3 位数字,其中 1 位是小数部分。所以整数部分剩下2位数。请注意,(65,9) 每个值将占用 65/2 字节。
    • 我将 2,1 解释为 2 位数字和 1 位小数。现在我明白了!谢谢!
    【解决方案2】:

    您的十进制变量未正确定义,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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多