我有一个Mariadb 10.2.26服务器,禁用了"STRICT_TRANS_TABLES"模式。仅启用模式为"NO_ENGINE_SUBSTITUTION"。但即使这样,我也会收到"一般错误:1364 字段''没有默认值"。有人知道为什么吗?谢谢。
以下是多年来所做的"不兼容更改"的一小部分示例。
----- 2014-09-25 5.7.5 里程碑 15 -- SQL 模式说明 -- 不兼容的变更-----
进行了以下 SQL 模式更改:
Strict SQL mode for transactional storage engines ([STRICT_TRANS_TABLES](http://dev.mysql.comhttps://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_strict_trans_tables))
现在默认启用。
Implementation of the [ONLY_FULL_GROUP_BY](http://dev.mysql.comhttps://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by)
SQL模式变得更加复杂,不再拒绝 以前被拒绝的确定性查询。
MySQL now recognizes when a nonaggregated selected column is functionally dependent on (uniquely determined by) GROUP BY columns. MySQL has an extension to standard SQL that permits references in the HAVING clause to aliased expressions in the select list.
以前,启用 ONLY_FULL_GROUP_BY 禁用此扩展,因此要求 HAVING 子句 使用无别名表达式编写。此限制已取消以便 HAVING 子句可以引用别名,而不管是否 ONLY_FULL_GROUP_BY 已启用。
In consequence, [ONLY_FULL_GROUP_BY](http://dev.mysql.comhttps://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by)
现在默认启用,以禁止非确定性查询 包含不保证在 一组。
The changes to the default SQL mode result in a default [sql_mode](http://dev.mysql.comhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode)
启用这些模式的系统变量值: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION。
The [ONLY_FULL_GROUP_BY](http://dev.mysql.comhttps://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by)
模式现在包含在由 安西 SQL 模式。
A new function, ANY_VALUE(), is available that can be used to force MySQL to accept queries that it thinks should be rejected with
ONLY_FULL_GROUP_BY 启用。函数返回值和类型与返回相同 其参数的值和类型,但未检查函数结果 对于 ONLY_FULL_GROUP_BY SQL 模式。
如果你发现有 ONLY_FULL_GROUP_BY 启用会导致对现有应用程序的查询被拒绝, 以下任一操作都应还原操作:
If it is possible to modify an offending query, do so, either so that nondeterministic nonaggregated columns are functionally dependent
在 GROUP BY 列上,或使用 ANY_VALUE()。
If it is not possible to modify an offending query (for example, if it is generated by a third-party application), set the sql_mode
服务器启动时未启用的系统变量 ONLY_FULL_GROUP_BY。
有关 SQL 模式和 GROUP BY 查询的详细信息,请参阅服务器 .SQL 模式 和 MySQL 对 GROUP 的处理 由。 (错误 #18486310)
----- 2014-03-31 5.7.4 里程碑 14 -- 添加或更改的功能 -- 不兼容的更改-----
已弃用的 ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, 和 NO_ZERO_IN_DATE SQL 模式现在不执行任何操作。相反,它们之前的效果被包括在内 在严格SQL模式的影响下 (STRICT_ALL_TABLES 或 STRICT_TRANS_TABLES)。 换句话说,严格模式现在的含义与以前相同 严格模式的含义加上 ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, 和 NO_ZERO_IN_DATE 模式。此更改减少了 SQL 模式的数量,并产生了效果 依赖于严格模式,并使它们成为严格模式本身的一部分。
为了准备此版本的MySQL中的SQL模式更改,它是建议在升级之前读取 MySQL 中的 SQL 模式更改 5.7. 该讨论提供了评估您的 应用程序将受到这些更改的影响。
已弃用的 ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, 和 NO_ZERO_IN_DATE SQL 模式仍被识别,因此命名它们的语句可以识别 不会产生错误,但将在将来的 MySQL。提前准备MySQL版本,其中 这些模式不存在,应用程序应修改为不引用 到这些模式名称。
----- 2014-03-27 5.6.17 正式发布 -- SQL 模式说明 -- 不兼容的变更-----
这 ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, 和 NO_ZERO_IN_DATE SQL 模式现已弃用,并将sql_mode值设置为包括 它们中的任何一个都会生成警告。在MySQL 5.7中,这些模式不执行任何操作。 相反,它们的效果包含在严格 SQL 模式的效果中 (STRICT_ALL_TABLES 或STRICT_TRANS_TABLES)。 MySQL 5.7 中更改的动机是减少 具有依赖于严格模式的效果的 SQL 模式,并使它们成为一部分 严格模式本身。
要提前准备升级到 MySQL 5.7,请参阅 SQL 模式 MySQL 中的更改 5.7. 该讨论提供了评估您的 应用程序将受到 MySQL 5.7 中 SQL 模式更改的影响。
----- 2013-02-05 5.6.10 正式发布 -- 修复错误 -- InnoDB -----
在线期间 DDL 操作,将列从可为 null 更改为 NOT NULL 可能会成功 或以不同的方式失败,具体取决于 ALTER 桌子 语句使用的算法=就地或算法=复制。操作 算法=复制将成功,即使列包含空值, 而具有算法=就地的操作失败,因为 该列包含 NULL 值的可能性。现在,制作一个列 NOT NULL 与 ALGORITHM=INPLACE 子句结合使用是 允许,但前提是 sql_mode 配置选项包括 STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES 设置。如果未使用 ALTER 指定算法子句 桌子 语句,则在线 DDL 操作将使用算法=就地,如果 可能,或者算法=复制,如果不是。 (错误 #15961327)
----- 2012-11-07 5.6.8 候选版本 -- 安装说明 -- -----
在Unix平台上,mysql_install_db现在创建一个默认的选项文件 在基本安装目录中命名为 my.cnf。此文件已创建 从分发包中包含的模板 您可以在底座中或底部找到模板 安装目录。开始使用mysqld_safe时,服务器 默认情况下使用 my.cnf 文件。如果 my.cnf 已经存在, mysql_install_db假定它正在使用中,并写入一个名为 my-new.cnf 相反。
除了一个例外,默认选项文件中的设置是 评论,没有效果。例外情况是文件更改 这 sql_mode 系统变量从其默认值 NO_ENGINE_SUBSTITUTION 还包括 STRICT_TRANS_TABLES:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
此设置生成导致错误的服务器配置 而不是在修改的操作中警告错误数据 事务表。请参阅服务器 SQL 模式。
my-default.cnf 模板替换了较旧的示例选项文件 (my-small.cnf、my-medium.cnf 等),它们不再是 分散式。
----- 2004-12-01 5.0.2 -- 新增或更改的功能 -- -----
添加 STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, 和 传统的 SQL 模式。这 传统的 模式是上述所有模式的简写。使用模式时 传统的如果您尝试在 列。它不会将值调整到最接近的合法值 价值。
----- 2004-12-01 5.0.2 -- 新增或更改的功能 -- -----
删除了编译标志DONT_USE_DEFAULT_FIELDS,因为 可以通过设置 sql_mode 系统变量为 STRICT_TRANS_TABLES。
----- 2004-12-01 5.0.2 -- 新增或更改的功能 -- -----
MySQL 现在可以记住哪些列被声明为默认值 值。在 STRICT_TRANS_TABLES/STRICT_ALL_TABLES 模式,如果您执行 插入 而不指定没有默认值的所有列。A面 这样做的效果是,当您为新表执行 SHOW CREATE 时,您没有 更长的时间 查看未指定 默认值。