mysql - 如何在 MySQL 8 的 my.cnf 中设置 sql_mode?

标签 mysql mysql-8.0 sql-mode

我正在运行 MySQL 8.0.11 社区版。我需要将 sql_mode 设置为排除 my.cnf 中的 ONLY_FULL_GROUP_BY,以便它可以安全重启。我尝试了以下变体:

sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql-mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

无论变量名为“sql_mode”还是“sql-mode”,它们都以相同的方式失败:

mysqld --verbose --help | grep "sql[-_]mode"
2018-06-19T15:22:51.667734Z 0 [ERROR] [MY-011071] [Server] /usr/sbin/mysqld: Error while setting value 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' to 'sql_mode'
    --sql-mode=name     Syntax: sql-mode=mode[,mode[,mode...]]. See the manual
2018-06-19T15:22:51.675498Z 0 [ERROR] [MY-010119] [Server] Aborting

sql模式

似乎 mysqld 处理 my.cnf 并将 'sql_mode' 或 'sql-mode' 转换为 'sql_mode',然后它拒绝了!

问题是如何解决这个问题?

最佳答案

SQL 模式 NO_AUTO_CREATE_USER 在 MySQL 8.0 中被删除,不再被识别。

https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-deprecations说:

The following features related to account management are removed:

  • Using GRANT to create users. Instead, use CREATE USER. Following this practice makes the NO_AUTO_CREATE_USER SQL mode immaterial for GRANT statements, so it too is removed.

将您的 sql_mode 更改为“STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION”。我在我的 8.0.11 沙盒实例上对此进行了测试,它有效。

sql-mode 或 sql_mode 的拼写都可以。

使用引号或省略引号都可以。

关于mysql - 如何在 MySQL 8 的 my.cnf 中设置 sql_mode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54007824/

相关文章:

mysql - 使用mysql重叠间隔

mysql - 通过命令行从 MySQL 导出/导入表

oracle - 如何定义在启动 sql 模式时运行的命令?

php - 如何在 PHP 数据库中存储 2.00 格式的值?

java - 如何解决无法加载身份验证插件 'caching_sha2_password' 问题

php - mysql子查询问题

mysql-8.0 - mysql 8.0.3 : function regexp_replace does not exist

mysql - Laravel 5 在 BETWEEN 中使用 OR 条件

更改 my.cf 后 MySQL 将无法启动

mysql - 我可以在查询中避免使用 sql_mode 吗?