MySQL 5.7 与 MySQL 8 的区别

embedded/2025/1/17 4:12:30/

文章目录

  • 前言
  • 一、性能改进
  • 二、功能增强
  • 三、安全性
  • 四、开发体验
  • 五、默认排序规则
  • 六、支持的排序规则数量
  • 七、区分敏感性(Sensitivity)增强
  • 八、Unicode 排序的改进
  • 九、性能改进
  • 十、自定义排序规则


前言

🆚MySQL 5.7MySQL 8.0 是两个重要的数据库版本,它们在特性、性能、安全性和兼容性等方面存在显著差异。

在这里插入图片描述


一、性能改进

  • 查询性能
    MySQL 8 中引入了许多查询优化功能,如基于成本的优化器改进、并行查询执行支持等,使复杂查询的效率显著提升。
  • JSON 性能
    MySQL 8JSON 数据类型处理上更高效,并引入了 JSON 表达式索引,提升了基于 JSON 的查询性能。
  • 持久性改进
    MySQL 8redo logundo log 的处理更高效,事务提交性能比 MySQL 5.7 更好。

二、功能增强

  • 窗口函数
    MySQL 8 新增了对窗口函数的支持(如 ROW_NUMBER()、RANK()),这在分析性查询中非常有用。而 MySQL 5.7 不支持此功能。

  • 通用表表达式(CTE)
    MySQL 8 增加了对 CTE(如 WITH 语句)的支持,可以更方便地进行递归查询和复杂查询分解。

  • 默认字符集
    MySQL 8 默认字符集为 utf8mb4,支持更多的字符集和表情符号。MySQL 5.7 的默认字符集是 latin1

  • JSON 支持改进
    虽然 MySQL 5.7 引入了 JSON 数据类型,但 MySQL 8 中新增了 JSON_TABLE 函数,可以更灵活地将 JSON 数据作为表格处理。

三、安全性

  • 账户管理
    MySQL 8 支持角色(Roles),可以将权限分组后分配给用户,从而简化权限管理。而 MySQL 5.7 中需要单独管理每个用户的权限。

  • 默认密码插件
    MySQL 8 默认使用更强的密码认证插件(caching_sha2_password),增强了安全性,而 MySQL 5.7 使用的是 mysql_native_password

  • 加密与数据保护
    MySQL 8 增强了对 TLS 连接的支持,并且支持更灵活的加密方案。

四、开发体验

  • 数据字典
    MySQL 8 将数据字典存储在 InnoDB 表中,而 MySQL 5.7 使用文件系统存储元数据。新方法减少了文件碎片化,提高了元数据查询性能。

  • 系统变量管理
    MySQL 8 中,许多系统变量支持动态修改,而 MySQL 5.7 对部分变量需要重启服务后才能生效。

  • 错误日志系统
    MySQL 8 提供了统一的错误日志框架,可以将日志输出到 JSON 文件或其他更现代的格式。

五、默认排序规则

  • MySQL 5.7
    默认字符集是 latin1,默认排序规则为 latin1_swedish_ci。对于大多数应用来说,latin1 字符集的默认排序规则并不适用多语言支持。

  • MySQL 8
    默认字符集升级为 utf8mb4,默认排序规则为 utf8mb4_0900_ai_ci。这意味着 MySQL 8 默认支持更多语言和符号,同时采用了更现代化的排序规则,处理 Unicode 数据更加标准化。

六、支持的排序规则数量

  • MySQL 5.7
    MySQL 5.7 支持的排序规则较少,主要集中在常用字符集上,比如 latin1utf8。它在一些多语言场景(如中文、日文和韩文)中的排序规则较为有限。

  • MySQL 8
    MySQL 8 大幅增加了排序规则的数量,尤其是对 utf8mb4 字符集,支持了大量与 Unicode 标准相关的排序规则(如 utf8mb4_ja_0900_as_cs 用于日语,utf8mb4_zh_0900_as_cs 用于中文)。

新增的规则以 _0900 开头,基于 Unicode Collation Algorithm (UCA) 9.0。
提供了对特定语言优化的排序规则,例如德语、法语等。

七、区分敏感性(Sensitivity)增强

排序规则根据以下属性来定义区分敏感性:

  1. ci(Case Insensitive):大小写不敏感。

  2. cs(Case Sensitive):大小写敏感。

  3. ai(Accent Insensitive):重音不敏感。

  4. as(Accent Sensitive):重音敏感。

  • MySQL 5.7
    排序规则的区分敏感性支持有限。例如,utf8_general_ci 默认大小写和重音不敏感。

  • MySQL 8
    增强了区分敏感性的灵活性,引入了更多以 _as_cs 结尾的排序规则。

例如:utf8mb4_0900_as_cs 是大小写和重音敏感排序规则。

八、Unicode 排序的改进

  • MySQL 5.7
    基于 Unicode 4.0 实现排序规则,这在处理现代语言需求时可能会有不一致的表现,尤其是对于 emoji 和最新 Unicode 字符。

  • MySQL 8
    升级到 Unicode 9.0 标准,改进了对现代语言和符号(如 emoji)的排序支持。此外,MySQL 8 对多语言排序的兼容性更强,能够更精确地处理字符的语义排序。

九、性能改进

  • MySQL 5.7
    排序规则性能有限,对于复杂排序(尤其是涉及多语言的排序)可能会变慢。

  • MySQL 8
    排序规则的性能得到优化,尤其是在使用 Unicode 排序规则时,MySQL 8 的排序效率显著提高。

十、自定义排序规则

  • MySQL 5.7 和更早版本
    不支持用户定义排序规则,所有排序规则都由系统预定义。

  • MySQL 8
    提供了更多内置排序规则,但仍不支持用户自定义排序规则。


http://www.ppmy.cn/embedded/154555.html

相关文章

vue.js辅助函数-mapMutations

在Vue.js中,使用辅助函数可以更方便地使用Vuex的mutation。而mapMutations就是Vuex提供的一个辅助函数,它可以将mutation映射到组件的methods中,使得我们可以在组件中直接调用mutation,而不需要手动进行commit。 mapMutations函数…

获取按图搜索淘宝商品(拍立淘)API接口用Java示例解释说明

在当今数字化时代,电子商务蓬勃发展,淘宝作为国内领先的电商平台,汇聚了海量商品信息。对于企业、开发者以及市场研究人员来说,能够获取淘宝商品的详细信息,对于市场分析、产品定价、竞品研究等方面具有重要意义。淘宝…

llama.cpp编译和运行 API调用

llama.cpp编译和运行 API调用 llama.cpp介绍 llama.cpp是一个开源项目,官方地址:https://github.com/ggerganov/llama.cpp,使用纯 C/C推理 Meta 的LLaMA模型,专门为在本地CPU上部署量化模型而设计。 它提供了一种简单而高效的方法,将训练好…

从零开始深度学习:(1)张量的常用操作

孩子们,懒大王回来了! 正如标题所说,今天我们继续开始新的篇章,我们要开始高强度学习深度学习的相关内容,这个专栏内容较多、全是干货,我们还会在合适的地方进行拓展一些额外的语法或者别的相关知识&#…

Web前端------HTML块级和行内标签之行内标签

一.行内标签介绍 行内标签----span 作用&#xff1a; 1.作为文本字体的容器&#xff0c;用来结合CSS修饰文本样式 2.根据行内标签的特性&#xff08;不换行/部分块级样式不生效eg&#xff1a;宽高等等&#xff09;&#xff0c; 做微小布局 二.代码展示 <!DOCTYPE html>…

Redis复制(replica)

Redis主从复制 [Redis主从复制]&#xff08;replica&#xff09;是一个多Redis实例进行数据同步的过程&#xff0c;其中一个实例是主实例&#xff08;Master&#xff09;&#xff0c;其他实例是从实例&#xff08;Slave&#xff09;。主实例负责处理命令请求&#xff0c;而从实…

永久免费工业设备日志采集

永久免费: <下载> <使用说明> 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架构 技术架构: Asp…

如何在openEuler中编译安装Apache HTTP Server并设置服务管理(含Systemd和Init脚本)

准备工作&#xff1a; 1、更新系统 dnf update -y 2、安装必要的依赖&#xff08;安装编译Apache所需的工具和库&#xff09; dnf groupinstall "Development Tools" dnf install pcre-devel openssl-devel expat-devel apr apr-util-devel 方法一&#xff1a;使用…