查询失败,原因如下:(错误#1366)不正确的整数值:'' for column;如何设置版本兼容性

Query failed with the following: (Error #1366) Incorrect integer value: '' for column; how to set version compatibility

这是我的当前版本的MySQL:

mysql  Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using  EditLine wrapper

这是以前的版本:

mysql  Ver 14.14 Distrib 5.5.47, for Linux (x86_64) using readline 5.1

我正在尝试 运行 的查询(缩写)是:

INSERT INTO bais_logs SET editor_id = '', type = 'basic'; -- no editor

我得到了指定的错误。 editor_id 是一个 INT(10) UNSIGNED NOT NULL

在之前的版本中是有效的,更新相关查询会比较困难和耗时。有什么方法可以设置与 MySQL 5.5 服务器的兼容性,以便忽略 '' 并继续?

我不确定,但我认为 SQL 模式在您的数据库上发生了变化。阅读 https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-important

后尝试相应更改它

与另一个 post 相同,SQL 模式已经改变(或者只是在新系统上以不同的方式开始)。我看到 post 关于设置 SQL 模式的文章,但我想在执行此操作时,我会综合分享一些有用的提示:

  1. 您需要 root 权限才能执行以下操作,但应该可以:

    设置全局 sql_mode = '';

  2. 如果服务器或 mysql 重新启动,项目 #1 将失败。要 PERMANENTLY 设置它,您必须遵循 此处 的信息:setting global sql_mode in mysql

  3. 重要的是,在进行更改之前弄清楚现有的 sql_mode 是什么!!

    SELECT@@GLOBAL.SQL_MODE; -- 这将正常输出逗号分隔的列表。

在评论的某处写下来;此配置可能是 "right" 配置或至少是大多数开发人员将在其下操作的配置。

  1. 转到 MySQL 文档并研究每种模式以了解它;他们在那里是有原因的。设置 sql_mode='' 是一种 hack(我对此感到内疚 :) 但仅供参考:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-important

MySQL 未将此操作解释为有效,因为其 SQL_MODE 处于严格模式。您可以编辑 my.ini 文件或在 运行 成功连接到数据库后添加此代码。

mysqli_query($connection, "SET GLOBAL sql_mode = ''");

假定此处的 $connection 变量是保存您与数据库的连接的变量。