UPDATE FIXED 1/18/15
在我们最近更新到MySQL 5.6.27(从Ubuntu repo)之后,此选项现在可以工作.所以这似乎是以前版本的MysqL的一个问题.
原题
随着对MysqL的新升级(5.6.20),更新和插入失败,除非我将sql-mode设置为NO_ENGINE_SUBSTITUTION.
感谢documentation,我可以从MysqL终端运行以下内容,并解决了这个问题(暂时的):
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';`
但下次MysqL重新启动时,这些设置将丢失.
所以我试图通过编辑/etc/MysqL/my.cnf(在我的标准服务器上运行Ubuntu 12.04.5 LTS),并添加documentation说应该添加的配置设置:
[MysqLd] sql-mode="NO_ENGINE_SUBSTITUTION"
用于测试的替代语法
仅用于测试目的,我也尝试过以下格式(重新启动MysqL时不会导致错误,但不会影响设置).
# dash no quotes sql-mode=NO_ENGINE_SUBSTITUTION # underscore no quotes sql_mode=NO_ENGINE_SUBSTITUTION # underscore and quotes sql_mode="NO_ENGINE_SUBSTITUTION"
没有什么工作.重新启动后,此设置丢失,我必须从MysqL终端手动重新运行命令,以便再次保存工作.
替代地点
>我知道/etc/MysqL/my.cnf被引用,因为我们在这个文件中定义了复制,而且正在运行.
>这个文件中没有另外一个相同的设置被覆盖.
通过从命令行运行这个配置文件,我得到一个被引用的配置文件的列表:
MysqLd --help --verbose
我看到一行如下:
Default options are read from the following files in the given order: /etc/my.cnf /etc/MysqL/my.cnf /usr/etc/my.cnf ~/.my.cnf
这是文件“查找”的默认位置,这并不意味着它实际上在那里找到了一个文件.我的服务器没有/etc/my.cnf,/usr/etc/my.cnf或〜/ .my.cnf.
所以看起来我的/etc/MysqL/my.cnf中的配置是MysqL引用的唯一文件,因此这个设置不会被覆盖.
测试的逻辑结论
然而,逻辑上,似乎语法不正确或被其他原因忽略.任何其他想法?