为什么我不能永久更改sql_mode?

时间:2015-12-05 03:15:41

标签: mysql command-line mysql-5.6 sql-mode

我目前在Windows 10中使用mysql服务器5.6,同时使用mysql,出现错误,就像这样的事情“以下列没有默认值”我在网上看到我可以解决这个问题如果我改变了sql_mode。它目前设置为

 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

我是从“mysql server 5.6”文件夹中的“my-default.ini”文件中获取的。我读了几个其他答案,说如果你想永久改变你的sql_mode,你应该通过“my-default.ini”文件来做。所以我做的是,我以管理员的身份运行我的记事本,然后我浏览了打开的“my-default.ini”文件:

  c:\programs files (x86)\mysql\mysql server 5.6\my-default.ini

当我打开文件时,我修改了最后一行:

  sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

  sql_mode=

然后我保存了文件,关闭了它。然后通过使用任务管理器重新启动我的sql服务器:

  task manager >> services >> mysql56

这是应该永久修改我的sql_mode的整个过程。当我查看我的“my-default.ini”文件时,最后一行仍然被修改。但如果我通过命令行登录mysql并使用以下代码查看我的sql_mode:

  select @@sql_mode;

我知道我的sql_mode是

  STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

我希望所有这些都被删除(永久),以便我的错误消失。如果我尝试使用以下命令从命令行修改sql_mode:

  set @@global.sql_mode="";

它有效,但是当我重新启动MySQL时,一切都恢复原状。

有人可以告诉我我做错了什么吗?如果有另一种方法可以解决这个问题。

4 个答案:

答案 0 :(得分:4)

更新:抱歉,忘记您使用的是Windows 10.我不确定如何在Windows中处理此问题,但可能会尝试将my-default.ini复制到my.ini并更改该设置。抱歉混淆。

不确定您是否可以将sql_mode设置为空,只是尝试更改/etc/mysql/my.cnf文件中的值。如果该文件夹/文件不存在,请创建它并尝试在sql_mode下设置[mysqld],如下所示:

[mysqld]
sql_mode=

我只做了同样的事情,我只将sql_mode设置为NO_ENGINE_SUBSTITUTION

答案 1 :(得分:0)

如果安装了MySQL Workbench,请检查实例的基本目录的服务器状态。你应该在那里找到一个my.ini文件来保存你的更改。

答案 2 :(得分:0)

sql_mode需要添加到文件/etc/init.d/mysql作为参数来启动:

$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --sql-mode="" $other_args >/dev/null 2>&1 &

重启MySQL数据库服务器以应用新配置。

答案 3 :(得分:0)

在MYSQL 8和ubuntu服务器20.xx中,我必须添加:

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIO

要归档 /etc/mysql/mysql.conf.d/mysqld.cnf

为了使设置在服务器重新启动后保持不变

免责声明

这是它实际工作的唯一地方,我不知道在哪里添加这些自定义设置是什么好习惯,但是“如果可行,这并不愚蠢”。有人可以告诉我。

我尝试了在论坛上找到的其他选项:

  • my.cnf 无法创建
  • 自定义cnf 无效
  • 将其添加到 mysql.cnf 无效