A.3 MySQL 5.7 FAQ:服务器 SQL 模式


**A.3.1. **
什么是服务器 SQL 模式?
服务器 SQL 模式定义 MySQL 应该支持什么 SQL 语法以及应该执行什么样的数据验证检查。这使得在不同环境中使用 MySQL 以及将 MySQL 与其他数据库服务器一起使用更加容易。 MySQL 服务器将这些模式分别应用于不同的 Client 端。有关更多信息,请参见第 5.1.10 节“服务器 SQL 模式”

**A.3.2. **
有多少种服务器 SQL 模式?
每个模式都可以独立打开和关闭。有关可用模式的完整列 table,请参见第 5.1.10 节“服务器 SQL 模式”

**A.3.3. **
如何确定服务器 SQL 模式?
您可以使用--sql-mode选项设置默认的 SQL 模式(用于mysqld启动)。使用语句SET [GLOBAL | SESSION] sql_mode ='modes',您可以从连接内部更改设置,可以在本地更改为连接,也可以在全局范围内生效。您可以通过发出SELECT @@sql_mode语句来检索当前模式。

**A.3.4. **
模式是否取决于数据库或连接?
模式未链接到特定数据库。可以在会话(连接)本地设置模式,也可以在服务器全局设置模式。您可以使用SET [GLOBAL | SESSION] sql_mode ='modes'更改这些设置。

**A.3.5. **
可以扩展严格模式的规则吗?
当提到严格模式时,是指启用了模式TRADITIONALSTRICT_TRANS_TABLESSTRICT_ALL_TABLES中的至少一个的模式。选项可以组合,因此您可以为模式添加限制。有关更多信息,请参见第 5.1.10 节“服务器 SQL 模式”

**A.3.6. **
严格模式会影响性能吗?
对 Importing 数据的密集验证 table 明,某些设置比未完成验证需要更多的时间。虽然对性能的影响不是很大,但是如果您不需要进行这样的验证(也许您的应用程序已经处理了所有这些事情),那么 MySQL 可以让您选择禁用严格模式。但是,如果确实需要,严格模式可以提供这种验证。

**A.3.7. **
安装 MySQL 5.7 时默认的服务器 SQL 模式是什么?
MySQL 5.7 中的默认 SQL 模式包括以下模式:ONLY_FULL_GROUP_BYSTRICT_TRANS_TABLESNO_ZERO_IN_DATENO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERONO_AUTO_CREATE_USERNO_ENGINE_SUBSTITUTION
有关所有可用模式和默认 MySQL 行为的信息,请参见第 5.1.10 节“服务器 SQL 模式”