我目前正在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中不起作用