1. 默认字符集由latin1变为utf8mb4
在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4
是utf-8的扩展,一个字符集能存4个字节,不但可以支持中文,还可以支持表情包、emoji表情
2.MyISAM系统表全部换成InnoDB表
系统表全部换成事务型的innodb表,默认的MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表。
3. 自增变量持久化
自增主键AUTO_INCREMENT=max(primary key)+1
AUTO_INCREMENT值进行持久化,MySQL重启后,该值将不会改变。
4. DDL原子化
InnoDB表的DDL支持事务完整性,要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作
5. 参数修改持久化
MySQL 8.0版本支持在线修改全局参数并持久化,通过加上PERSIST关键字,可以将修改的参数持久化到新的配置文件(mysqld-auto.cnf)中,重启MySQL时,可以从该配置文件获取到最新的配置参数。
查看mysql的所有全局变量的值:
SHOW GLOBAL VARIABLES
6. 新增降序索引
7. group by 不再隐式排序
mysql 8.0 对于group by 字段不再隐式排序,如需要排序,必须显式加上order by 子句。
8. JSON特性增强
MySQL 8.0添加了新的JSON函数,并提高了对JSON值进行排序和分组的性能。
JSON表函数
使用SQL机制来处理JSON数据,JSON_TABLE() 创建JSON数据的关系视图。它将JSON数据评估的结果映射到关系行和列
JSON聚合函数
JSON_ARRAYAGG() 来生成JSON数组并 JSON_OBJECTAGG() 生成JSON对象。这使得可以将多行中的JSON文档组合成JSON数组或JSON对象
JSON合并函数
JSON_MERGE() MySQL 8.0中不推荐使用
JSON漂亮功能
JSON_PRETTY() 函数接受JSON本机数据类型或JSON的字符串表示形式,并以人类可读的方式返回JSON格式的字符串,并带有新行和缩进。
JSON大小函数
JSON_STORAGE_SIZE() 回报的JSON数据类型字节的实际大小。在 JSON_STORAGE_FREE() 返回以字节为单位,包括分段和填充保存就地更新一个JSON二进制类型的自由空间。
JSON改进了排序
MySQL 8.0通过使用可变长度排序键为JSON值排序/分组提供了更好的性能。
JSON部分更新
MySQL的8.0增加了对部分更新支持 JSON_REMOVE() , JSON_SET() 以及 JSON_REPLACE() 功能。如果只更新JSON文档的某些部分,我们希望向处理程序提供有关更改内容的信息,以便存储引擎和复制不需要编写完整文档。
GIS
MySQL 8.0提供地理支持。这包括空间参考系统(SRS)的元数据支持,以及SRS感知空间数据类型,空间索引和空间函数。简而言之,MySQL 8.0可以理解地球表面的纬度和经度坐标
空间参考系统(SRS)
ST_SPATIAL_REFERENCE_SYSTEMS 信息模式视图提供有关空间数据可用的空间参考系统的信息。
SRID感知空间数据类型
SRID感知空间索引
SRID感知空间功能
9. redo & undo 日志加密
innodb_undo_log_encrypt
innodb_undo_log_encrypt
10. innodb select for update跳过锁等待
select ... for update,select ... for share(8.0新增语法) 添加 NOWAIT、SKIP LOCKED语法,跳过锁等待,或者跳过锁定。
通过添加nowait,skip locked语法,能够立即返回。如果查询的行已经加锁,那么nowait会立即报错返回,而skip locked也会立即返回,只是返回的结果中不包含被锁定的行。
11. 增加SET_VAR语法
在sql语法中增加SET_VAR语法,动态调整部分参数,有利于提升语句性能。
12. 支持不可见索引
13. 支持直方图
14. 新增innodb_dedicated_server参数
能够让InnoDB根据服务器上检测到的内存大小自动配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method三个参数
15. 日志分类更详细
在错误信息中添加了错误信息编号[MY-010311]和错误所属子系统[Server]
16. undo空间自动回收
innodb_undo_log_truncate参数在8.0.2版本默认值由OFF变为ON,默认开启undo日志表空间自动回收。
innodb_undo_tablespaces参数在8.0.2版本默认为2,当一个undo表空间被回收时,还有另外一个提供正常服务。
innodb_max_undo_log_size参数定义了undo表空间回收的最大值,当undo表空间超过这个值,该表空间被标记为可回收。
17. 增加资源组
MySQL 8.0新增了一个资源组功能,用于调控线程优先级以及绑定CPU核。
MySQL用户需要有 RESOURCE_GROUP_ADMIN权限才能创建、修改、删除资源组。
默认提供两个资源组,分别是USR_default,SYS_default
18. 增加角色管理
角色可以认为是一些权限的集合,为用户赋予统一的角色,权限的修改直接通过角色来进行,无需为每个用户单独授权。
1、MySQL用户管理
1.1、验证插件和密码加密方式的变化,caching_sha2_password是默认的身份验证插件
1.2、用户授权和修改密码
1.3、密码过期时间管理,要全局建立自动密码到期策略,请使用default_password_lifetime系统变量。其默认值为0,禁用自动密码过期。
1.4、MySQL用户密码重用策略设置,MySQL允许限制重复使用以前的密码。
2、MySQL8.0的角色管理
2.1、创建角色并授予用户角色权限
2.2、检查角色权限
要验证分配给用户的权限,使用 SHOW GRANTS
2.3、撤消角色或角色权限
正如可以授权某个用户的角色一样,可以从帐户中撤销这些角色:REVOKE role FROM user;REVOKE可以用于角色修改角色权限。
2.4、删除角色
要删除角色,请使用DROP ROLE: