## A.3 MySQL 8.0 常见问题：服务器 SQL 模式

[](<>)A.3.1。[什么是服务器 SQL 模式？](faqs-sql-modes.html#faq-mysql-what-sql-modes)A.3.2。[有多少种服务器 SQL 模式？](faqs-sql-modes.html#faq-mysql-count-sql-modes)A.3.3。[如何确定服务器 SQL 模式？](faqs-sql-modes.html#faq-mysql-how-see-sql-mode)A.3.4。[模式是否依赖于数据库或连接？](faqs-sql-modes.html#faq-mysql-sql-mode-dependency)A.3.5。[可以扩展严格模式的规则吗？](faqs-sql-modes.html#faq-mysql-extend-strict-mode)A.3.6。[严格模式会影响性能吗？](faqs-sql-modes.html#faq-mysql-strict-impact)A.3.7.[安装 MySQL 8.0 时默认的服务器 SQL 模式是什么？](faqs-sql-modes.html#faq-mysql-what-default-mode)

| [](<>)[](<>)<br/><br/>**A.3.1。** | 什么是服务器 SQL 模式？ |
| :------------------------------- | :------------- |
|  | 服务器 SQL 模式定义了 MySQL 应该支持什么 SQL 语法以及它应该执行什么样的数据验证检查。这使得在不同环境中使用 MySQL 以及将 MySQL 与其他数据库服务器一起使用变得更加容易。MySQL 服务器将这些模式分别应用于不同的客户端。有关详细信息，请参阅[第 5.1.11 节，“服务器 SQL 模式”](sql-mode.html). |
| [](<>)[](<>)<br/><br/>**A.3.2。** | 有多少种服务器 SQL 模式？ |
|  | 每种模式都可以独立开启和关闭。看[第 5.1.11 节，“服务器 SQL 模式”](sql-mode.html), 以获得可用模式的完整列表。 |
| [](<>)[](<>)<br/><br/>**A.3.3。** | 如何确定服务器 SQL 模式？ |
|  | 您可以设置默认的 SQL 模式（例如[**mysqld**](mysqld.html)启动）与[`--sql 模式`](server-options.html#option_mysqld_sql-mode)选项。使用语句[`SET [GLOBAL|SESSION] sql_mode='*`模式`*'`](set-variable.html)，您可以在连接内更改设置，可以在本地更改为连接，也可以在全局范围内生效。您可以通过发出`选择@@sql_mode`陈述。 |
| [](<>)[](<>)<br/><br/>**A.3.4。** | 模式是否依赖于数据库或连接？ |
|  | 模式未链接到特定数据库。模式可以本地设置为会话（连接），也可以全局设置为服务器。您可以使用更改这些设置[`SET [GLOBAL|SESSION] sql_mode='*`模式`*'`](set-variable.html). |
| [](<>)[](<>)<br/><br/>**A.3.5。** | 可以扩展严格模式的规则吗？ |
|  | 当我们提到*严格模式*，我们的意思是一种模式，其中至少一种模式[`传统的`](sql-mode.html#sqlmode_traditional),[`STRICT_TRANS_TABLES`](sql-mode.html#sqlmode_strict_trans_tables)， 要么[`STRICT_ALL_TABLES`](sql-mode.html#sqlmode_strict_all_tables)已启用。选项可以组合，因此您可以为模式添加限制。看[第 5.1.11 节，“服务器 SQL 模式”](sql-mode.html)， 了解更多信息。 |
| [](<>)[](<>)<br/><br/>**A.3.6。** | 严格模式会影响性能吗？ |
|  | 与未完成验证相比，某些设置需要更多时间的输入数据的密集验证。虽然性能影响不是很大，但如果您不需要此类验证（也许您的应用程序已经处理了所有这些），那么 MySQL 会为您提供禁用严格模式的选项。但是，如果您确实需要它，严格模式可以提供此类验证。 |
| [](<>)[](<>)<br/><br/>**A.3.7.** | 安装 MySQL 8.0 时默认的服务器 SQL 模式是什么？ |
|  | MySQL 8.0 中的默认 SQL 模式包括以下模式：[`ONLY_FULL_GROUP_BY`](sql-mode.html#sqlmode_only_full_group_by),[`STRICT_TRANS_TABLES`](sql-mode.html#sqlmode_strict_trans_tables),[`NO_ZERO_IN_DATE`](sql-mode.html#sqlmode_no_zero_in_date),[`NO_ZERO_DATE`](sql-mode.html#sqlmode_no_zero_date),[`ERROR_FOR_DIVISION_BY_ZERO`](sql-mode.html#sqlmode_error_for_division_by_zero)， 和[`NO_ENGINE_SUBSTITUTION`](sql-mode.html#sqlmode_no_engine_substitution).<br/><br/>有关所有可用模式和默认 MySQL 行为的信息，请参阅[第 5.1.11 节，“服务器 SQL 模式”](sql-mode.html). |
