MySQL 9.0 相较于 MySQL 8.0 引入了多项重要改进和新特性,以下是两者的主要区别及其详细说明:
1. 认证机制
MySQL 8.0
- 支持
mysql_native_password
和caching_sha2_password
认证插件。 - 默认使用
caching_sha2_password
,但未完全移除mysql_native_password
。
MySQL 9.0
- 完全移除
mysql_native_password
:- 该插件被彻底移除,不再支持旧版客户端(如不支持
CLIENT_PLUGIN_AUTH
的客户端)。 - 强制使用更安全的
caching_sha2_password
认证插件。
- 该插件被彻底移除,不再支持旧版客户端(如不支持
- SHA-1 弃用:
- 移除对 SHA-1 哈希算法的支持,改用更安全的算法(如 SHA-256)。
2. 向量数据类型(VECTOR)
MySQL 8.0
- 不支持向量数据类型。
MySQL 9.0
- 新增
VECTOR
类型:- 用于存储 4 字节浮点数列表(最大支持 16383 个元素),适用于机器学习、AI 向量搜索等场景。
- 示例:
CREATE TABLE v1 (c1 VECTOR(5000)); -- 最大存储 5000 个浮点数
- 向量操作函数:
STRING_TO_VECTOR()
/TO_VECTOR()
:将列表字符串转换为二进制向量。VECTOR_TO_STRING()
/FROM_VECTOR()
:将二进制向量转换为字符串。VECTOR_DIM()
:获取向量长度。
3. JSON 处理增强
MySQL 8.0
- 支持基础 JSON 数据类型和函数(如
JSON_EXTRACT
、JSON_ARRAYAGG
)。 EXPLAIN ANALYZE
输出需手动解析。
MySQL 9.0
- JSON 格式执行计划保存:
- 支持将
EXPLAIN ANALYZE
的 JSON 输出直接保存到变量中,便于自动化分析:SET @plan = ''; EXPLAIN ANALYZE FORMAT=JSON INTO @plan SELECT * FROM your_table; SELECT @plan; -- 返回 JSON 格式的执行计划
- 支持将
- JSON 输出格式控制:
- 新增系统变量
explain_json_format_version
,支持选择不同版本的 JSON 输出格式。
- 新增系统变量
4. 预处理语句(Prepared Statements)
MySQL 8.0
- 仅支持 DML(数据操作语言)的预处理语句(如
SELECT
、INSERT
)。
MySQL 9.0
- 扩展支持事件 DDL(数据定义语言):
- 允许通过预处理语句动态创建、修改或删除事件(如
CREATE EVENT
、ALTER EVENT
)。 - 示例:
SET @stmt = 'CREATE EVENT daily_backup ON SCHEDULE EVERY 1 DAY DO ...'; PREPARE stmt FROM @stmt; EXECUTE stmt;
- 允许通过预处理语句动态创建、修改或删除事件(如
5. 性能模式(Performance Schema)
MySQL 8.0
- 提供基础的系统变量监控功能。
MySQL 9.0
- 新增系统表:
variables_metadata
:记录系统变量的元数据(如最小值、最大值、单位)。global_variable_attributes
:提供全局变量的属性信息(如持久化状态)。
- 替代废弃功能:
- 替代
variables_info
表中的MIN_VALUE
和MAX_VALUE
列。
- 替代
6. JavaScript 存储程序(企业版)
MySQL 8.0
- 不支持 JavaScript 编写存储过程或函数。
MySQL 9.0
- 支持 JavaScript 存储程序:
- 企业版新增
JS_EXECUTE()
函数,允许在存储过程中调用 JavaScript 代码。 - 示例:
DELIMITER // CREATE FUNCTION js_add(a INT, b INT) RETURNS INT BEGIN DECLARE result INT; SET result = JS_EXECUTE('return a + b;', a, b); RETURN result; END // DELIMITER ;
- 企业版新增
7. 错误号码范围
MySQL 8.0
- 错误码范围未明确划分。
MySQL 9.0
- 新错误码从 6400 开始:
- 便于区分 MySQL 9.0 的特定错误与其他版本的错误。
8. 安全性改进
MySQL 8.0
- 支持
caching_sha2_password
认证插件。 - 仍允许使用 SHA-1 哈希算法(已不推荐)。
MySQL 9.0
- 全面弃用 SHA-1:
- 强制使用更安全的哈希算法(如 SHA-256)。
- 强化认证机制:
- 通过移除旧插件和强制使用现代认证协议,减少安全漏洞风险。
9. GIS 功能增强
MySQL 8.0
- 支持基础空间数据类型(如
GEOMETRY
)和简单计算(如ST_DISTANCE
)。
MySQL 9.0
- 复杂几何操作与多坐标系支持:
- 新增对复杂几何对象(如多面体、曲面)的操作函数。
- 支持多坐标系转换(如 WGS84 到 UTM)。
10. 其他改进
MySQL 9.0 的新增功能
- 线程池插件增强:
- 提供更详细的性能模式信息,优化高并发场景下的资源分配。
- 资源组管理:
- 支持更细粒度的 CPU 和内存资源分配。
- 云原生优化:
- 适配 AWS、GCP、Azure 等云环境,支持容器化部署。
适用场景与升级建议
推荐升级的场景
- 新项目:优先选择 MySQL 9.0,尤其是需要处理向量数据、AI 应用或高维计算的场景。
- 安全敏感系统:利用其强化的认证机制和 SHA-1 弃用策略。
- 性能优化需求:通过向量类型、JSON 增强功能和性能模式改进提升数据库效率。
暂缓升级的场景
- 依赖旧认证插件的应用:需先迁移到
caching_sha2_password
或升级客户端。 - 社区版用户:无法使用 JavaScript 存储程序等企业版功能。
总结
MySQL 9.0 通过引入 向量数据类型、增强 JSON 处理、扩展预处理语句 和 强化安全性,显著提升了数据库在 AI、数据分析和高并发场景下的能力。对于新项目,尤其是需要处理多维数据或复杂地理空间计算的场景,MySQL 9.0 是更优选择。而现有系统在升级前需充分测试兼容性,特别是认证插件和旧客户端适配问题。