文章目录
官方文档地址: A.3 MySQL 8.0 FAQ: Server SQL Mode
A.3.1. 什么是服务器 SQL 模式?
服务器 SQL 模式定义了 MySQL 应该支持什么 SQL 语法,以及它应该执行什么类型的数据验证检查。这使得在不同的环境中使用 MySQL 变得容易,也使得 MySQL 与其他数据库服务器一起使用变得容易。MySQL 服务器将这些模式分别应用到不同的客户端。更多信息,请参见 5.1.11 服务器 SQL 模式。
A.3.2. 有多少服务器 SQL 模式?
每一种模式都可以独立开关。参见 5.1.11 服务器 SQL 模式,获得可用模式的完整列表。
A.3.3. 如何判断服务器的 SQL 模式?
可以在 MySQL 启动的时候使用--sql-mode
选项设置默认的 SQL 模式。
可以使用SET [GLOBAL|SESSION] sql_mode='modes'
语句在连接内部修改模式设置,可以选择只是当前连接生效,也可以选择全局生效。
可以通过SELECT @@sql_mode
语句来查询当前模式。
A.3.4. 模式从属于数据库还是连接?
一个模式不和一个特定的数据库相关连。模式可以在当前会话(连接)设置为本地的,也可以在服务器上设置为全局的。您可以使用SET [GLOBAL|SESSION] sql_mode='modes'
。
A.3.5. 严格模式的规则可以扩展吗?
当提到严格模式时,指的是至少启用了TRADITIONAL
,STRICT_TRANS_TABLES
、STRICT_ALL_TABLES
中的一个,选项可以组合在一起,因此您可以向模式中添加限制条件。更多信息,请参见 5.1.11 服务器 SQL 模式。
A.3.6. 严格模式是否影响性能?
某些设置要求对输入的数据进行密集验证,这样会比不进行验证时需要更多的时间。虽然性能影响不是很大,但是如果您不需要这样的验证(也许您的应用程序已经处理了所有这些验证),那么您可以选择在 MySQL 中禁用严格模式。但是,如果您确实需要这些验证,严格模式可以提供这样的验证。
A.3.7. 安装 MySQL 8.0 时,默认的 SQL 模式是什么?
MySQL 8.0 默认的 SQL 模式包括以下模式:ONLY_FULL_GROUP_BY
,STRICT_TRANS_TABLES
,NO_ZERO_IN_DATE
,NO_ZERO_DATE
,ERROR_FOR_DIVISION_BY_ZERO
, NO_ENGINE_SUBSTITUTION
。
有关所有可用模式和默认 MySQL 行为的信息,请参见 5.1.11 服务器 SQL 模式。