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



我目前正在windows 10中使用mysql服务器5.6。在使用mysql时,一个错误不断出现,类似于"以下列没有默认值",我在互联网上读到,如果我更改sqlmode,我可以解决这个问题。当前设置为

 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

我从"mysqlserver5.6"文件夹中的"mydefault.ini"文件中获取了这个。我读过其他几个答案,其中说如果你想永久更改sql_mode,你应该通过"mydefault.ini"文件来完成。所以我所做的是,我以管理员的身份运行我的记事本,然后浏览打开"我的默认.ini"文件,该文件位于:

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

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

  sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

  sql_mode=

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

  task manager >> services >> mysql56

这是应该永久修改我的sql_mode的整个过程。当我查看"mydefault.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时,一切都恢复了原状。

有人能告诉我我做错了什么吗?以及是否有其他方法可以解决这个问题。

更新:对不起,忘记您使用的是Windows 10。我不知道如何在Windows中处理这个问题,但可能会尝试将my-default.ini复制到my.ini并更改该设置。抱歉弄糊涂了。


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

[mysqld]
sql_mode=

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

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

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数据库服务器以应用新配置。

在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中不起作用

相关内容

  • 没有找到相关文章

最新更新