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
,但非全局具有!为什么,我能做些什么呢?
由于严格的规则生效,插入仍然失败。