MySQL 8.4 参考手册  /  一般信息  /  MySQL 标准兼容性

1.7 MySQL 标准兼容性

本节描述 MySQL 如何与 ANSI/ISO SQL 标准相关联。MySQL 服务器对 SQL 标准进行了许多扩展,您可以在此了解这些扩展及其用法。您还可以找到有关 MySQL 服务器中缺少的功能以及如何解决一些差异的信息。

SQL 标准自 1986 年以来一直在不断发展,并且存在多个版本。在本手册中,“SQL-92” 指的是 1992 年发布的标准。“SQL:1999”,“SQL:2003”,“SQL:2008” 和 “SQL:2011” 指的是相应年份发布的标准版本,最新版本是 SQL:2011。我们使用短语 “SQL 标准” 或 “标准 SQL” 来表示任何时候的 SQL 标准的最新版本。

我们产品的首要目标之一是继续努力实现与 SQL 标准的兼容,但不会牺牲速度或可靠性。如果这能大大提高 MySQL 服务器对我们大部分用户群体的可用性,我们也不害怕添加对 SQL 的扩展或对非 SQL 功能的支持。 HANDLER 接口就是这种策略的例子。请参阅 第 15.2.5 节,“HANDLER 语句”

我们继续支持事务型和非事务型数据库,以满足关键任务的 24/7 使用以及繁重的 Web 或日志使用。

MySQL 服务器最初是为在小型计算机系统上处理中等规模数据库(10-10000 万行,或每个表约 100MB)而设计的。如今,MySQL 服务器可以处理太字节级的数据库。

我们的目标不是实时支持,尽管 MySQL 复制功能提供了重要的功能。

MySQL 支持 ODBC 级别 0 到 3.51。

MySQL 使用 NDBCLUSTER 存储引擎支持高可用性数据库集群。请参阅 第 25 章,MySQL NDB 集群 8.4

我们实现了支持大部分 W3C XPath 标准的 XML 功能。请参阅 第 14.11 节,“XML 函数”

MySQL 支持根据 RFC 7159 定义的原生 JSON 数据类型,并且基于 ECMAScript 标准 (ECMA-262)。请参阅 第 13.5 节,“JSON 数据类型”。MySQL 还实现了 SQL:2016 标准的预发布草案中指定的 SQL/JSON 函数的子集;有关更多信息,请参阅 第 14.17 节,“JSON 函数”

选择 SQL 模式

MySQL 服务器可以在不同的 SQL 模式下运行,并且可以根据 sql_mode 系统变量的值,对不同的客户端应用不同的模式。DBA 可以设置全局 SQL 模式以匹配站点服务器的操作要求,每个应用程序可以设置自己的会话 SQL 模式以满足自己的要求。

模式会影响 MySQL 支持的 SQL 语法以及它执行的数据验证检查。这使得在不同的环境中使用 MySQL 以及将 MySQL 与其他数据库服务器一起使用变得更加容易。

有关设置 SQL 模式的更多信息,请参阅 第 7.1.11 节,“服务器 SQL 模式”

在 ANSI 模式下运行 MySQL

要在 ANSI 模式下运行 MySQL 服务器,请使用 --ansi 选项启动 mysqld。在 ANSI 模式下运行服务器与使用以下选项启动服务器相同

--transaction-isolation=SERIALIZABLE --sql-mode=ANSI

要在运行时实现相同的效果,请执行以下两个语句

SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET GLOBAL sql_mode = 'ANSI';

您可以看到,将 sql_mode 系统变量设置为 'ANSI' 会启用与 ANSI 模式相关的所有 SQL 模式选项,如下所示

mysql> SET GLOBAL sql_mode='ANSI';
mysql> SELECT @@GLOBAL.sql_mode;
        -> 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI'

使用 --ansi 在 ANSI 模式下运行服务器与将 SQL 模式设置为 'ANSI' 并不完全相同,因为 --ansi 选项还会设置事务隔离级别。

请参阅 第 7.1.7 节,“服务器命令选项”