0

Fedora Desktop 35 运行 MariaDB 10.5,大约一个月前全新安装。

为什么我的变化是/etc/my.cnf/mariadb-server.cnf sql_mode变化@@GLOBAL.sql_mode而不是变化@@sql_mode

我正在尝试STRICT_TRANS_TABLES从我的sql_mode(我有一个 DATETIME NOT NULL 列,我需要从 INSERT 中省略它并让它假定一个默认值)中删除。我的系统有一个简单的 MariaDB 安装,几乎是空/etc/my.cnf的,其中包括所有文件,/etc/my.cnf.d其中有一个mariadb-server.cnf[server]可以设置的部分sql-mode

如果省略,则默认为https://mariadb.com/docs/reference/mdb/system-variables/sql_mode/ to中指定的STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION。通过 SquirrelSQL 查询确认:

SELECT @@GLOBAL.sql_mode global, @@sql_mode;
global  @@sql_mode
STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION   STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

所以默认情况下两者@@sql_mode@@GLOBAL.sql_mode是等价的。

将此添加到mariadb-server.cnf[server]行已经存在):

[server]
sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重新启动服务器systemctl restart mariadb,日志中没有错误,然后从上面重新运行查询:

global  @@sql_mode
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION   STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

请注意,全局sql_mode不再具有STRICT_TRANS_TABLES,但非全局具有!为什么,我能做些什么呢?

由于严格的规则生效,插入仍然失败。

4

0 回答 0