我安装了运行 Mariadb 的 Ubuntu 服务器 16.04.3,最近更新到了 10.2.9-MariaDB。自上次更新以来,我现在有一个看起来像的 sql_mode sql_mode = 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
,大概是默认的,但我需要做一些更改。即删除NO_ZERO_DATE
并可STRICT_TRANS_TABLES
能让应用程序再次运行。
问题是我sql_mode =
在几个 .cnf(选项)文件(屏幕截图中列出)中添加了特定内容,每次更改后都会弹出/重新启动 mysql 服务器,弹出整个服务器,但什么都没有。查询没有任何变化> SELECT @@GLOBAL.sql_mode global;
。
谷歌没有提供帮助——我错过了什么?
更新:我终于弄清楚了默认设置的来源。/etc/mysql/my.cnf
包含sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL
。
并给出:
TRADITIONAL | Makes MariaDB work like a traditional SQL server. Same as:
STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, TRADITIONAL, NO_AUTO_CREATE_USER
这告诉我.cnf 的未按预期被读取。
答案1
移除TRADITIONAL
从更新中sql 模式值解决并防止TRADITIONAL
扩展到STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, TRADITIONAL, NO_AUTO_CREATE_USER
答案2
这并没有回答 OP,但当其他人看到这个页面时可能会回答他们的谷歌搜索(就像我刚才做的那样):
我在设置 sql-mode 时遇到了麻烦,my.cnf
因为各个设置之间有空格。换句话说,这有效:
[mysqld] sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
这没有:
[mysqld] 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 行全部在一行上 - Stack-Exchange 上的自动换行将其推到第二行上。
不幸的是,MySQL Workbench 为我生成的配置中有空格 - 但 MySQL 并没有告诉我问题出在哪里my.cnf
。
我在 Ubuntu 18.04 上运行 MySQL 5.7