Mysql严格模式,顾名思义,是一种比较严格的模式,它呢使用来限制在处理数据的时候,更新数据插入数据的时候,对数据更严格的进行对比和检查,保证数据的准确性和完整性。在这个模式下可以有效的防止非法或者不正确的数据写入到数据库中,从而有效提高数据的可靠性。
严格模式主要分为以下几种:
STRICT_TRANS_TABLES:在这种模式下,MySQL会对所有支持事务的存储引擎(如InnoDB)执行严格的检查。
STRICT_ALL_TABLES:这种模式下,MySQL会对所有存储引擎执行严格的检查,无论它们是否支持事务。
NO_ZERO_DATE、NO_ZERO_IN_DATE、ERROR_FOR_DIVISION_BY_ZERO等:这些是严格模式下的具体选项,用于控制特定类型的数据错误处理。
NO_ZERO_DATE:禁止插入零日期('0000-00-00')。
NO_ZERO_IN_DATE:禁止插入零日期或零时间('0000-00-00 00:00:00')。
ERROR_FOR_DIVISION_BY_ZERO:禁止除以零操作,并返回错误信息。
那么我们如何关闭严格模式呢?
1、可以通过命令行命令来临时修改
登录MySQL服务器:
使用命令行客户端或图形界面客户端登录到MySQL服务器。在命令行中,可以使用mysql -u 用户名 -p命令登录,然后输入MySQL用户密码。
查看当前的SQL模式设置:
执行SHOW VARIABLES LIKE 'sql_mode';命令来查看当前的sql_mode设置,其中可能包含STRICT_TRANS_TABLES(表示启用严格模式)。
修改SQL模式:
执行SET GLOBAL sql_mode='';命令来临时关闭严格模式(对当前MySQL服务器实例的所有新会话生效,但重启MySQL后会失效)。
如果只想对当前会话生效,可以使用SET SESSION sql_mode='';命令。
2、通过修改配置文件永久修改
找到MySQL配置文件:
在Linux系统中,通常是/etc/my.cnf或/etc/mysql/my.cnf。
在Windows系统中,通常是my.ini。
编辑配置文件:
打开配置文件,找到[mysqld]部分。
在其中添加或修改sql_mode参数,移除STRICT_TRANS_TABLES或其他严格模式相关的设置。例如:
ini
[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION" # 示例,根据需要设置其他模式
或者,如果希望完全关闭所有模式(通常不推荐,因为可能会降低数据完整性和准确性),可以设置为空字符串:
ini
[mysqld]
sql_mode=""
重启MySQL服务:
保存配置文件更改后,需要重启MySQL服务以使更改生效。可以使用服务管理工具(如systemctl、service命令)或命令行工具(如mysqladmin shutdown后mysqld_safe &)来重启MySQL服务。
验证更改:
重新登录到MySQL服务器,并再次执行SHOW VARIABLES LIKE 'sql_mode';命令来验证sql_mode设置是否已更新,从而确认严格模式已被关闭。