Skip to content

MySQL - 版本

软件版本控制是演进和改进的关键过程。新版本引入了强大的功能、提升了性能、修补了安全漏洞并移除了过时的组件。了解您正在使用的 MySQL 版本对于充分发挥其潜力并确保应用程序安全和可维护性至关重要。

将您的应用程序运行在稳定、受积极支持的 MySQL 版本上,例如最新的通用版(General Availability, GA)发布,以受益于最新的安全补丁和功能,这是一种重要的最佳实践。

MySQL 拥有丰富的历史,5.x 系列多年来一直是网络的基础。每个主要版本都带来了显著的改进。

  • MySQL 5.1 (2008): 引入了事件调度和表分区等功能。
  • MySQL 5.5 (2010): 通过将高性能、事务性的 InnoDB 设置为默认存储引擎,标志着一个重要的里程碑。
  • MySQL 5.6 (2013): 专注于性能,改进了查询优化器、InnoDB 和复制功能。
  • MySQL 5.7 (2015): 进一步提升了性能,并增加了原生的 JSON 数据类型,预示着向支持更灵活数据模型的转变。

虽然这些版本具有开创性,但它们现在已达到生命周期终止(End-of-Life, EOL),不应再用于新开发。所有新项目都应基于 MySQL 8.x 构建。

MySQL 8.0 于 2018 年首次发布,代表着一次重大的飞跃。它引入了大量增强功能,重点关注性能、现代 SQL 特性、开发者体验和可靠性。

8.0 版本使 MySQL 符合现代 SQL 标准,从而实现更强大、更易读的查询。

  • 通用表表达式(Common Table Expressions, CTEs): 使用 WITH 子句,您可以创建命名的临时结果集,使复杂查询更清晰、更易读。支持递归和非递归 CTE。
  • 窗口函数(Window Functions): 它们对与当前行相关的一组表行执行计算。这对于计算运行总计、移动平均或对结果进行排名等任务非常有用,无需复杂的自连接。
  • 改进的优化器: 查询优化器变得更智能,具有哈希连接等功能,可以显著加快连接大型表的查询速度。
  • 降序索引: 索引现在可以按降序存储,消除了需要反向排序的查询的性能损失。
  • TempTable 存储引擎: 一种更高效的内部临时表处理引擎,提高了复杂查询的性能。
  • JSON 增强: 原生 JSON 数据类型得到了显著改进,新增了直接在数据库内搜索和操作 JSON 文档的功能。
  • 默认表达式: 列现在可以使用表达式作为其默认值,例如 data JSON DEFAULT ('{}')。
  • 可靠的 DDL: 原子性数据定义语言(Data Definition Language, DDL)语句确保 CREATE、ALTER 或 DROP 等操作要么完全完成,要么完全不执行,从而防止部分修改的 schema。

应避免的:已弃用和已移除的功能

Section titled “应避免的:已弃用和已移除的功能”

随着进步而来的是改变。MySQL 8.0 弃用或移除了几个较旧的功能。您应该更新您的代码以避免使用它们。

  • 查询缓存已移除: 查询缓存是旧版本中的一个功能,由于可伸缩性问题,在 8.0 中已完全移除。现代应用程序应专注于查询优化和应用程序级缓存。
  • utf8mb3 字符集: 这是旧的 utf8 别名,现已弃用。始终使用 utf8mb4 以确保完整的 Unicode 支持,包括表情符号。
  • ZEROFILL 属性: 此数值类型属性已弃用。数字前导零的格式化应在您的应用程序代码中处理。
  • FLOAT(M,D) 和 DOUBLE(M,D): 为浮点类型指定精度和标度已弃用。请使用不带这些参数的 FLOAT 和 DOUBLE,或者对于精确数值数据使用 DECIMAL。
  • 密码管理: 旧的 PASSWORD() 函数已移除。请使用更安全的 caching_sha2_password 认证插件。

您可以通过一个简单的查询轻松检查当前 MySQL 服务器的版本:

SELECT VERSION();

输出可能类似于:8.0.34。

对于任何项目,您都应该有一个保持数据库更新的策略。使用托管式云数据库服务(如 Amazon RDS、Google Cloud SQL 或 Azure Database for MySQL)可以简化此过程,因为云提供商通常会为您处理补丁和主要版本升级。