mysql5.7和mysql8.0区别
2022/7/21 2:23:41
本文主要是介绍mysql5.7和mysql8.0区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.mysql5.7字符编码的问题
mysql5.7和之前版本,默认字符集为latin1,直接插入中文字符的时候会出现乱码的情况。所以在安装5.7及之前的版本的mysql的时候要把字符编码修改为utf8字符集,utf8字符集指的是utf8mb3。从mysql8.0开始,数据库默认字符编码改为utf8mb4。
查看编码命令:
show variables like 'character_%'; show variables like 'collation_%';
2.用户的创建与授权
在MySQL5.7的版本:
grant all privileges on *.* to 'bertram'@'localhost' identified by '1q2w3e4r';; #grant all privileges on *.* to '用户名'@'主机' identified by '密码';
在MySQL8.0需要分开执行,否则使用以前的命令在8.0里面创建用户,会出现sql语法错误:
mysql> create user 'bertram'@'localhost' identified by '1q2w3e4r'; Query OK, 0 rows affected (0.04 sec) #create user '用户名'@'主机' identified by '密码'; mysql> grant all privileges on *.* to 'bertram'@'localhost'; Query OK, 0 rows affected (0.04 sec) #grant all privileges on . to '用户名'@'主机';
注意事项:
1)、8.0系已无query_cahe参数,注释参数
2)、授权时需要分开授权,不能用grant 建立用户
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
-- 给用户分配权限
grant all privileges on *.* to 'myuser'@'%' ;
-- 单独授予某种权限的写法;具体再详细的操作请参考其他文章
GRANT SELECT ON oilsystem.input TO 'myuser'@'%';
-- 刷新权限,使操作生效
FLUSH PRIVILEGES;
3)、第一次修改root账号密码此采用alter,
不能用此方式,8系已不支持
update user set password=password("123456") where user="root";
set password=password('dengzl123');
正确修改:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'dengzl123';
3.认证插件更新
MySQL5.7 默认身份插件是 mysql_native_password MySQL8.0 默认的身份插件是 caching_sha2_password 查看身份认证插件命令:show variables like 'default_authentication_plugin%';
mysql> show variables like 'default_authentication_plugin%'; +-------------------------------+-----------------------+ | Variable_name | Value | +-------------------------------+-----------------------+ | default_authentication_plugin | caching_sha2_password | +-------------------------------+-----------------------+ 1 row in set (0.01 sec)
身份认证插件可以通过以下2中方式改变: 1)系统变量default_authentication_plugin去改变,在my.ini文件的[mysqld]下设置default_authentication_plugin=mysql_native_password 2)如果希望只是某一个用户通过mysql_native_password的方式认证,可以修改数据库mysql下面的user表的字段,执行以下命令:
mysql> alter user '用户名'@'主机' identified with mysql_native_password by '密码';
4.表结构配置
一个表结构在MySQL 5.7中如下:
CREATE TABLE kube_resource_version (one_row_id BOOL NOT NULL DEFAULT true, resource_version VARCHAR(255), PRIMARY KEY (one_row_id), CONSTRAINT kube_resource_version_one_row_id CHECK (one_row_id), CHECK (one_row_id IN (0, 1))); Query OK, 0 rows affected (0.06 sec)
在MySQL中其实会被默认转换为如下的表结构:
CREATE TABLE `kube_resource_version` ( `one_row_id` tinyint(1) NOT NULL DEFAULT '1', `resource_version` varchar(255) DEFAULT NULL, PRIMARY KEY (`one_row_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果查看在线业务的实际数据如下:
one_row_id|resource_version| ----------+----------------+ 1|dddd |
带来的问题是在MySQL 5.7中可以成功创建,但是在8.0会报错:
CREATE TABLE kube_resource_version (one_row_id BOOL NOT NULL DEFAULT true, resource_version VARCHAR(255), PRIMARY KEY (one_row_id), CONSTRAINT kube_resource_version_one_row_id CHECK (one_row_id), CHECK (one_row_id IN (0, 1))); ERROR 3812 (HY000): An expression of non-boolean type specified to a check constraint 'kube_resource_version one row id'.
5.性能提升
官方表示MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在读/写工作负载、IO 密集型工作负载、以及高竞争工作负载时相比MySQL5.7有更好的性能
六.更强的NoSQL文档支持
MySQL 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。
七.窗口函数
新增的窗口函数如下: 窗口函数和hive的窗口函数类似 准备建表和准备数据: 按照课程分组, 更多窗口函数使用见: https://www.cnblogs.com/gjc592/p/13194119.html
八.隐藏索引
可以将索引通过命令设置为 隐藏 或 显示。对于被 隐藏 的索引,它不会被查询优化器所使用,我们可以使用这一功能,对相关的查询进行性能调试,通过 隐藏 或 显示,分析数据库性能差异的原因,同时也可以去除无效的索引。
九.持久化设置
MySQL8.0 新增 SET PERSIST 的命令,该命令的配置值保存到数据目录下的mysqld-auto.cnf文件中,待重启后,读取该文件,用其中的配置覆盖缺省的配置文件,补充了SET GLOBAL 命令只能临时生效的不足;
命令的使下如:
十.重构BLOB
重构 BLOB 加速了片段读取/更新操作,可以加速 JSON 数据的操作。大幅改进了对 JSON 的支持,添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数。
十一.事务性数据字典
完全脱离了 MyISAM 存储引擎,真正将数据字典放到了 InnoDB 中的一些表中,不再需要 FRM、TRG、PAR 等文件;Information Schema 现在以数据字典表的一个视图出现。也就是原则上可以不需要 MyISAM 数据表类型,系统表都可以放到 InnoDB 之中。
十二.SQL角色
可以创建角色,给用户设置或去除角色,大大方便权限的管理。
十二.允许跳过锁等待
select ... for update,select ... for share(8.0新增语法) 添加 NOWAIT、SKIP LOCKED语法,跳过锁等待,或者跳过锁定。
session1
这篇关于mysql5.7和mysql8.0区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程
- 2024-11-01部署MySQL集群学习:新手入门教程
- 2024-11-01部署MySQL集群入门:新手必读指南
- 2024-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南