MySQL 5.7和MySQL 8.0的4个细节差异

MySQL 5.7和MySQL 8.0的4个细节差异
最新回答
哥特式·浅唱

2022-02-23 04:32:20

MySQL 5.7与MySQL 8.0之间的差异,虽不明显,但细节之处大有不同。这些差异在推动业务升级时起着关键作用,以下列举了其中四个主要细节:

细节1:

在MySQL 5.7版本中,全面推行了GTID,导致了原有的`create table xxx as select * from xx`模式不再适用,建议改用`create table xxx like xxxxx; insert into xxx select * from xxxxx;`。而在MySQL 8.0中,很多之前不建议使用的模式开始被支持,使得一些业务模式在升级后出现了混乱。

细节2:

在MySQL 5.7中,字段名为`rank`是可以接受的,但MySQL 8.0引入窗口函数后,字段名同样为`rank`时会导致SQL语法错误。除了`rank`外,字段名`first_value`也受到限制,带来了一系列SQL语法问题,如创建表时使用`first_value varchar(30)`会导致错误。

细节3:

MySQL 5.7中的表结构配置如`kube_resource_version`表,使用了`BOOL`类型作为`one_row_id`。在MySQL中,该字段被默认转换为`tinyint(1)`类型,但在MySQL 8.0中,创建表时使用`BOOL`类型会导致错误,显示为`An expression of non-boolean type specified to a check constraint`,8.0版本对数据类型的要求更严格。

细节4:

在处理大表删除操作时,MySQL 5.7在执行`delete`操作时,状态和信息显示为`Executing event`和`delete from xxxxx`,同时`Seconds_Behind_Master`显示为0,实际数据已产生延迟。而在MySQL 8.0中,状态和信息显示为`Applying batch of row changes (delete)`和`delete from xxxxx`,明确提示出批量操作,尽管延迟问题依然存在,但至少在操作提示上更为清晰。

综上所述,MySQL 8.0在细节处理上更为细腻,但并非完全兼容MySQL 5.7版本,升级时需进行深入测试和案例分析,确保平滑过渡。