【问题标题】:How to bypass "numeric value out of range" when inserting into MariaDB插入 MariaDB 时如何绕过“超出范围的数值”
【发布时间】:2019-03-13 23:51:18
【问题描述】:

有时我会收到此错误:

SQLSTATE[22003]: Numeric value out of range: 1264 Out of range value for column

我想知道是否可以配置 MariaDB 以在大于长度列时接受和削减值,或者我是否需要在插入数据之前进行此检查。

【问题讨论】:

  • 问题是你为什么要让数据库销毁你的数据?
  • 此错误消息通常表明您在表中使用了不正确的列类型。例如,您尝试将电话号码存储在 int 中,或者将大于 2147483647 的数字存储为 int 而不是 bigint

标签: php mysql sql mariadb sql-insert


【解决方案1】:

在 MariaDB 中,您需要禁用 STRICT_TRANS_TABLESSTRICT_ALL_TABLES,如 the documentation 中所述:

至少启用STRICT_TRANS_TABLESSTRICT_ALL_TABLES 之一的模式称为严格模式。

[...]

未设置严格模式(版本

【讨论】:

    【解决方案2】:

    虽然 GMB 解决了 state 问题,但我想就加载“未知”数据提出建议。

    1. LOAD 放入具有过大数据类型的临时表中。
    2. SELECT MAX(x) ... 之类的东西调查数据
    3. 对所需的数据类型做出明智的决定。
    4. CREATE TABLE
    5. INSERT INTO real_table SELECT * FROM temp_table;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 2011-08-02
      • 1970-01-01
      • 2020-07-13
      • 2012-06-12
      相关资源
      最近更新 更多