# 1.7 MySQL 标准合规性
本节介绍 MySQL 如何与 ANSI/ISO SQL 标准相关联。MySQL Server 对 SQL 标准有很多扩展,在这里您可以了解它们是什么以及如何使用它们。您还可以找到有关 MySQL 服务器缺少的功能以及如何解决一些差异的信息。
SQL 标准自 1986 年以来一直在发展,并且存在多个版本。本手册中,“SQL-92”指的是 1992 年发布的标准。“SQL:1999”、“SQL:2003”、“SQL:2008”、“SQL:2011”指的是 1992 年发布的标准版本。相应的年份,最后一个是最新版本。我们在任何时候都使用短语“SQL 标准”或“标准 SQL”来表示 SQL 标准的当前版本。
我们对该产品的主要目标之一是继续努力符合 SQL 标准,但不牺牲速度或可靠性。如果这大大增加了 MySQL 服务器对我们大部分用户群的可用性,我们不害怕添加 SQL 扩展或对非 SQL 功能的支持。这处理程序
界面就是这种策略的一个例子。看第 13.2.4 节,“处理程序语句”.
我们继续支持事务性和非事务性数据库,以满足关键任务 24/7 使用和大量 Web 或日志记录使用。
MySQL Server 最初设计用于在小型计算机系统上处理中型数据库(10-1 亿行,或每个表约 100MB)。今天,MySQL 服务器处理 TB 级的数据库。
尽管 MySQL 复制功能提供了重要的功能,但我们的目标不是实时支持。
MySQL 支持 ODBC 级别 0 到 3.51。
MySQL 使用NDBCLUSTER
存储引擎。看第 23 章,MySQL NDB 集群 8.0.
我们实现了支持大多数 W3C XPath 标准的 XML 功能。看第 12.12 节,“XML 函数”.
MySQL 支持 RFC 7159 定义的原生 JSON 数据类型,并基于 ECMAScript 标准 (ECMA-262)。看第 11.5 节,“JSON 数据类型”.MySQL 还实现了 SQL:2016 标准的预发布草案指定的 SQL/JSON 函数的子集;看第 12.18 节,“JSON 函数”, 了解更多信息。
# 选择 SQL 模式
MySQL 服务器可以运行在不同的 SQL 模式下,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode
系统变量。DBA 可以设置全局 SQL 模式以匹配站点服务器操作要求,并且每个应用程序都可以根据自己的要求设置其会话 SQL 模式。
模式会影响 MySQL 支持的 SQL 语法和它执行的数据验证检查。这使得在不同环境中使用 MySQL 以及将 MySQL 与其他数据库服务器一起使用变得更加容易。
有关设置 SQL 模式的详细信息,请参阅第 5.1.11 节,“服务器 SQL 模式”.
# 在 ANSI 模式下运行 MySQL
要以 ANSI 模式运行 MySQL 服务器,请启动mysqld与--ansi
选项。以 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'