无法将 SQL_MODE 设置为 Mysql 8

Tob*_*bia 10 mysql sql

我必须设置一个持久的自定义 SQL 模式持久到我的服务器。我在 /etc/mysql/mysql.conf.d/mysqld.cnf 中添加了这一行

[mysqld]
...
sql-mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)

当我尝试运行 mysql 时,出现以下错误:

2020-06-03T09:49:24.567568Z 0 [错误] [MY-000077] [服务器] /usr/sbin/mysqld:将值“STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION”设置为“sql_mode”时出错。mysqld 版本 8.0.20-0ubuntu0.20.04.1 适用于 x86_64 上的 Linux ((Ubuntu))

我尝试更改sql-modesql_mode并删除双引号,但它没有改变。

小智 12

只需编辑/etc/mysql/my.conf,删除“NO_AUTO_CREATE_USER”。结果将是:

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)

这对我有用!


小智 1

行为有一定的局限性sql_mode不同 Linux 环境中

相反,您应该卸载它并用MariaDBmysql替换它 。一个非常好的 mysql 服务器替代方案。(就你而言 - 这是 mysql 服务器,除了它的包名称)

卸载:

apt remove mysql mysqld mysql-server mysql-client
# note we do not purge this package, since we have databases with data in place.
Run Code Online (Sandbox Code Playgroud)

现在安装 MariaDB - https://downloads.mariadb.org/mariadb/repositories/#distro=Ubuntu&distro_release=focal--ubuntu_focal&mirror=icm&version=10.4

有时,软件包维护者已经拥有 MariaDB。所以,很简单:

apt install mariadb mariadb-server mariadb-client

我鼓励您事先使用或其他方式备份您的数据mysqldump。但我要注意的是,安装后maraidb(只要它将使用相同的数据目录),那么所有数据库和表将继续正常工作。