一、两者区别
1.性能提升级
官方表示MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在读/写工作负载、IO 密集型工作负载、以及高竞争工作负载时相比MySQL5.7有更好的性能。
2.更强的NoSQL文档支持
MySQL 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的ACID合规性。
3.窗口函数
也就是在满足某种条件的记录集合上执行的特殊函数。它可以用来实现若干新的查询方式。窗口函数与 SUM()、COUNT() 这种集合函数类似,但它不会将多行查询结果合并为一行,而 是将结果放回多行当中。即窗口函数不需要GROUP BY。窗口函数的使用,将大大提高相关的分析型场景的效率。
4.UTF-8编码
从MySQL8.0开始,使用utf8mb4作来MySQL的默认字符集,并支持Unicode 9,默认字符集将从 latin1改为utf8mb4,默认定序collation将从latin1_swedish_ci改为utf8mb4_800_ci_ai;
5.隐藏索引
可以将索引通过命令设置为隐藏或显示。对于被隐藏的索引,它不会被查询优化器所使用,我们可以使用这一功能,对相关的查询进行性能调试,通过隐藏或显示,分析数据库性能差异的原因,同时也可以去除无效的索引。这个跟Oracle里面设置索引失效时一样的。
6.持久化设置
MySQL8.0新增SET PERSIST的命令,该命令的配置值保存到数据目录下的mysqld-auto.cnf文件中,待重启后,读取该文件,用其中的配置覆盖缺省的配置文件,补充了SET GLOBAL命令只能临时生效的不足;
7.重构BLOB
重构BLOB加速了片段读取/更新操作,可以加速JSON数据的操作。大幅改进了对JSON的支持,添加了基于路径查询参数从JSON字段中抽取数据的JSON_EXTRACT()函数,以及用于将数据分别组合到JSON数组和对象中的JSON_ARRAYAGG()和JSON_OBJECTAGG()聚合函数。
8.事务性数据字典
完全脱离了MyISAM存储引擎,真正将数据字典放到InnoDB中的一些表中,不再需要 FRM、TRG、PAR 等文件;Information Schema现在以数据字典表的一个视图出现。也就是原则上可以不需要MyISAM数据表类型,系统表都可以放到InnoDB之中。
9.SQL角色
可以创建角色,给用户设置或去除角色,大大方便权限的管理。
详见:MySQL 8.0的用户和角色管理
10.除去查询缓存
首先,查询缓存的效果取决于缓存的命中率,只有命中缓存的查询效果才能有改善,因此无法预测其性能。其次,查询缓存的另一个大问题是它受到单个互斥锁的保护。在具有多个内核的服务器上,大量查询会导致大量的互斥锁争用。
详见:知识点 | 为何从8.0开始取消了MySQL查询缓存Query Cache?
二、两者转化
1.驱动包下载
Mysql5.0驱动包
链接:https://pan.baidu.com/s/1jyiRME-d2cHPyUilYH6MYA
提取码:jzru
Mysql8.0驱动包
链接:https://pan.baidu.com/s/1NkjhYej3drzahGsS4L7GTQ
提取码:qug5
2.数据库配置
1.Mysql5.0的DRIVER是没有cj的,Mysql8.0是有cj的。
2.Mysql5.0的URL问号后面是useSSL=false&useUnicode=true&characterEncoding=utf-8,Mysql8.0问号后面是serverTimezone=UTC。
3.账号密码设置成你自己的账号密码。这里要注意一下,有很多同学用数据库的账号密码来登录系统,这是不对的。系统的账号密码在数据库的表里面。
Mysql5.0配置
//以下是mysql5.0版本的配置 // 数据库地址 private String DRIVER = "com.mysql.jdbc.Driver"; // 数据库地址 private String URL = "jdbc:mysql://localhost:3306/swing_warehouse?useSSL=false&useUnicode=true&characterEncoding=utf-8"; // 数据库用户名 private String USER = "root"; // 数据库密码 private String PASS = ""; //以上是mysql5.0版本的配置
Mysql8.0配置
//以下是mysql8.0版本的配置 // 数据库地址 private String DRIVER = "com.mysql.cj.jdbc.Driver"; // 数据库地址 private String URL = "jdbc:mysql://localhost:3306/swing_warehouse?serverTimezone=UTC"; // 数据库用户名 private String USER = "root"; // 数据库密码 private String PASS = "admin";
三、数据库测试类
有很多同学的代码没有问题,可能自己的数据库配置写错了。这时候你怎么办呢?你需要在你的代码里面新建数据库测试类,用来测试你的数据库配置。
package com.sjsq; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JDBCTEST { // 数据库地址 public static String DRIVER = "com.mysql.cj.jdbc.Driver"; // 数据库地址 public static String URL = "jdbc:mysql://localhost:3306/world?serverTimezone=UTC"; // 数据库用户名 public static String USER = "root"; // 数据库密码 public static String PASS = "admin"; // 主函数 public static void main(String[] args) { try { Class.forName(DRIVER); Connection con = DriverManager.getConnection(URL, USER, PASS); Statement stet = con.createStatement(); //我的数据库Person中的表student,改成你自己的表 String sql = "select count(*) from city;"; ResultSet rs = stet.executeQuery(sql); int count = 0; while (rs.next()) { count = rs.getInt(1); } System.out.print("您的city表的条数为:"); System.out.println(count); con.close(); } catch ( Exception e) { e.printStackTrace(); } } }
四、参考资料
CSDN博主:猿图笔记的博客_CSDN博客-mysql,IT,shell领域博主
文章来源:MySQL8.0 和 MySQL5的区别_猿图笔记的博客-CSDN博客
五、版权备注
如有侵权请联系我删除!
六、支持博主
如果您觉得这篇文章对您有用,博客关注加点赞。
如果您想看一些视频,那么你可以搜索B站:水坚石青!
祝您身心健康,阖家辛福,万事如意!