如何使sql-mode =“NO_ENGINE_SUBSTITUTION”永久在MySQL my.cnf

前端之家收集整理的这篇文章主要介绍了如何使sql-mode =“NO_ENGINE_SUBSTITUTION”永久在MySQL my.cnf前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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引用的唯一文件,因此这个设置不会被覆盖.

测试的逻辑结论

然而,逻辑上,似乎语法不正确或被其他原因忽略.任何其他想法?

解决方法

只是为了将我的配置添加到组合中,我使用MysqL 5.7.8,默认情况下具有相同的严格sql_mode规则.

我终于想到我的/etc/MysqL/my.conf中有以下工作:

[MysqLd]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

即破折号,而不是下划线并引用价值.

>除了/etc/MysqL/my.conf之外,我还没有其他的my.conf文件
>有一些额外的配置包括从/etc/MysqL/conf.d/加载,但它们是空白的.

这似乎对我有用.

猜你在找的MsSQL相关文章