【问题标题】:MySql 5.7: General error: 1366 Incorrect integer value: '' for TinyInt(1) fieldMySql 5.7:一般错误:1366 Incorrect integer value: '' for TinyInt(1) field
【发布时间】:2018-12-13 21:27:58
【问题描述】:

将 MySql 5.5 升级到 5.7 后,我在使用 php 7.1 的数据库架构中遇到了插入查询失败的问题。

查询在 5.5 版本上运行良好,但 5.7 抛出异常:

消息:受保护:(字符串)SQLSTATE [HY000]:一般错误:1366 不正确的整数值:第 1 行的列 'is_on_demand' 的 ''

is_on_demand 是 tinyint(1) 类型

考虑到 5.5 允许这样做,为什么 5.7 不允许将空字符串插入为 false 值?

【问题讨论】:

  • 我找不到有关更改的具体参考,但它肯定是合乎逻辑的。错误值通常是零而不是空字符串。此外,空字符串不是整数,因此确保整数列具有整数值是有意义的(当然,除非它被定义为能够为空......当然这与空字符串不同)。
  • @Dave 我已成功将sql_mode = "NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 添加到我在 debian 下的 mysql 配置中。

标签: php mysql


【解决方案1】:

添加:

sql_mode = "NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

进入 mysql 配置文件。

【讨论】:

    【解决方案2】:

    隐藏错误(不推荐,但在解决根本原因之前您可能必须这样做)

    禁用mysql严格模式:

    SHOW VARIABLES LIKE 'sql_mode';

    +--------------+------------------------------------------+ 
    |Variable_name |Value                                     |
    +--------------+------------------------------------------+
    |sql_mode      |STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION|
    +--------------+------------------------------------------+
    

    sudo nano /etc/mysql/my.cnf

    添加以下内容

    [mysqld]
    sql_mode= <previous modes list but exclude STRICT_TRANS_TABLES>
    
    

    sudo service mysql restart

    注意: 前面的步骤将显示启用 mysql 模式的警告,而不是产生错误,要隐藏警告,您可以像前面的步骤一样删除相关模式。

    使用文档: https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多