我正在运行 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, useCREATE USER
. Following this practice makes theNO_AUTO_CREATE_USER
SQL mode immaterial forGRANT
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/