MySQL的SQL模式用于控制语法和数据校验规则,通过SELECT @@sql_mode查看当前设置,常见模式包括STRICT_TRANS_TABLES、ONLY_FULL_GROUP_BY等,可使用SET SESSION或SET GLOBAL临时修改,需在my.cnf或my.ini中配置sql-mode以永久生效,推荐生产环境启用严格模式以确保数据严谨性。

在 MySQL 中,SQL 模式(SQL Mode)用于定义服务器支持的 SQL 语法以及数据校验规则。合理设置 SQL 模式有助于提升数据的严谨性和程序的兼容性。
一、查看当前 SQL 模式
可以通过以下命令查看当前会话或全局的 SQL 模式:
SELECT @@sql_mode; -- 或查看全局模式 SELECT @@global.sql_mode;
执行后会返回一个由多个模式名称组成的字符串,例如:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
二、常见 SQL 模式说明
三、临时设置 SQL 模式(重启失效)
可以动态修改当前会话或全局的 SQL 模式:
-- 设置当前会话的 SQL 模式 SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE'; -- 设置全局 SQL 模式(影响新连接) SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE';
注意:通过 SET GLOBAL 设置后,已存在的会话不会受影响,仅对新建立的连接生效。
四、永久配置 SQL 模式
要使设置永久生效,需修改 MySQL 配置文件(my.cnf 或 my.ini):
找到配置文件位置,通常位于:
/etc/my.cnf 或 /etc/mysql/my.cnf
C:\ProgramData\MySQL\MySQL Server x.x\my.ini
在 [mysqld] 段落下添加或修改 sql-mode:
[mysqld] sql-mode = "STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
# Linux 示例 sudo systemctl restart mysql # Windows net stop mysql net start mysql
五、推荐配置建议
'' 或 ALLOW_INVALID_DATES
sql-mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
MySQL 8.0 默认模式为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
基本上就这些。设置 SQL 模式不复杂,但容易忽略其对应用行为的影响,尤其是迁移数据库或升级版本时,应检查模式一致性。
以上就是如何在mysql中设置SQL模式_mysql SQL模式配置的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号