我们最近更新到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终端手动运行命令,以便再次保存。
我从命令行运行它来获取正在引用的配置文件列表:
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引用的唯一文件,因此不会覆盖此设置。
逻辑上,似乎语法不正确或因某些其他原因而被忽略。还有其他想法吗?
答案 0 :(得分:34)
只是为了添加我的配置,我正在使用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/加载,但它们都是空白的。
这似乎对我有用。
答案 1 :(得分:9)
应该是:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
而不是
[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION"
然后重启mysqld服务。
答案 2 :(得分:8)
您的服务器可能会读取与您正在编辑的my.cnf
不同的/etc/my.cnf
(除非您在启动mysqld时指定了它)。
来自MySQL Certification Study Guide:
搜索顺序包括两个常规选项文件
$MYSQL_HOME/my.cnf
和MYSQL_HOME
。第二个文件仅在MYSQL_HOME
时使用 环境变量已设置。通常,您将它发送到MySQL 安装目录。 (mysqld_safe脚本尝试设置~/.my.cnf
如果在启动服务器之前未设置它。) 选项文件搜索顺序还包括mysql
(即主页 目录)。这不是服务器特别合适的位置 选项。 (通常,您以root
或--user=mysql
方式调用服务器 使用sql-mode
选项。由用户读取的特定用户文件 服务器将取决于您从哪个登录帐户调用它, 可能导致使用不一致的选项集。)
另一种可能性是,您的,
选项会在同一文件中被进一步覆盖。多个选项必须在同一行中由[mysqld]
sql_mode = "NO_ENGINE_SUBSTITUTION"
分隔。
P.S。:你需要报价,IIRC。现在您已经尝试过没有引号,我很确定,您正在编辑错误的文件,因为MySQL在选项文件中出现错误时无法启动
P.P.S。:再看一下我的配置文件吧,那就是
{{1}}
它正在工作。
答案 3 :(得分:5)
在ubuntu 16.04上,对我来说很好。 路径:/etc/mysql/mysql.cnf
并粘贴
[mysqld]
#
# * Basic Settings
#
sql_mode = "NO_ENGINE_SUBSTITUTION"
答案 4 :(得分:3)
对我来说这是一个许可问题。
输入:
mysqld --verbose --help | grep -A 1 "Default options"
[警告]全球可写配置文件' /etc/mysql/my.cnf'被忽略了。
因此,请尝试执行以下操作,然后重新启动服务器
chmod 644 '/etc/mysql/my.cnf'
它将赋予mysql访问权限以读取和写入文件。
答案 5 :(得分:2)
在 Linux Mint 18 上,设置了sql-mode
选项的默认配置文件位于此处:
/usr/my.cnf
相关的是:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
所以你可以在那里设置。
如果不确定哪个配置文件有这样的选项你可以搜索它:
$ sudo find / -iname "*my.cnf*"
获取一份清单:
/var/lib/dpkg/alternatives/my.cnf
/usr/my.cnf
/etc/alternatives/my.cnf
/etc/mysql/my.cnf.fallback
/etc/mysql/my.cnf
答案 6 :(得分:2)
我的问题是我在5.7.20的选项之间有空格。删除它们使线条看起来像
[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
答案 7 :(得分:1)
对我来说,sql-mode
的两个键都很有用。我是否使用过
# dash no quotes
sql-mode=NO_ENGINE_SUBSTITUTION
或
# underscore no quotes
sql_mode=NO_ENGINE_SUBSTITUTION
在my.ini
文件中,没有任何区别,据我测试,两者都被接受。
真正起作用的是my.ini
文件末尾的缺少换行符。
所以每个人对此有疑问或与my.ini
/ my.cnf
类似的问题:请确保文件末尾有空白行!
使用MySQL 5.7.27测试。
答案 8 :(得分:0)
解决方案非常简单...搜索了一段时间,结果证明你只需要编辑2个配置文件:
你必须添加两个文件:
[mysqld]
...
sql_mode=NO_ENGINE_SUBSTITUTION
至少,这是什么适用于5.6.24-2 + deb.sury.org~sensision + 2
答案 9 :(得分:0)
如果您使用的是mariadb,则必须修改/etc/mysql/conf.d /./中的mariadb.cnf文件。
我认为其他任何基于my-sql的解决方案都是相同的。
答案 10 :(得分:0)
我正在运行WHM 10.2.15-MariaDB。要永久禁用严格模式,请首先找出我们的安装更喜欢的配置文件。为此,我们需要二进制文件的位置:
$ which mysqld
/usr/sbin/mysqld
然后,我们使用此路径执行查找:
$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
我们可以看到第一个喜欢的配置文件是etc文件夹的根目录,但是隐藏了第二个.cnf文件 - 〜/ .my.cnf。将以下内容添加到〜/ .my.cnf文件中为我永久禁用严格模式(需要在mysqld部分内):
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
我发现在/etc/my.cnf上添加这行除了让我发疯外没有任何效果。
答案 11 :(得分:0)
[已修复] 服务器版本:10.1.38-MariaDB-mariadb.org二进制分发版
转到:C:\ xampp \ mysql \ bin 在记事本中打开my.ini并找到[mysqld](第27行),然后在此行(第28行)之后键入:skip-grant-tables
保存文件,然后重新加载phpmyadmin页面。它对我有用。
答案 12 :(得分:0)
这也让我发疯,直到我意识到关键所在的段落必须是[mysqld]而不是[mysql]
因此,对于10.3.22-MariaDB-1ubuntu1,我的解决方案是在/etc/mysql/conf.d/mysql.cnf
[mysqld]
sql_mode = "ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"