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 查询缓存 : Yes or No for large website building platform

java - 如何根据空间坐标获取 MySQL 8 中的对象列表

mysql - 更新到 MySQL 8.0 会在删除其他表引用的项目时产生问题

mysql - 如何使用多个值设置 Amazon RDS SQL_MODE

mysql - 创建DATABASE时的SQL_MODE和TIME_ZONE

mysql - 我可以将数据作为大字符串导入MySQL吗?

MySQL - 行到列

php - 为什么 MySQL 对列的匹配返回负结果?

mysql - 如何在 MySQL 8.0 中授予 root 用户所有权限

mysql - 如何在我的 Mac 上永久设置 SQL_MODE