MySQL 8.0中过时的功能(一)

以下功能在MySQL 8.0中已被弃用,并可能在将来的系列中被移除。如果有替代方案,请更新应用程序以使用这些替代方案。

对于在MySQL 8.0被移除的高级MySQL系列中已经被弃用的功能,从MySQL 8.0源复制到较高系列的副本时,语句可能会失败,或者在源和副本上产生不同的效果。为了避免这些问题,应用程序应调整使用了在8.0中被弃用的功能的部分,尽量避免使用它们,并在可能的情况下使用替代方案。

  • utf8mb3字符集已被弃用,请改用utf8mb4字符集。

  • 以下字符集已被弃用:

    • ucs2
    • macroman 和 macce
    • dec
    • hp8
  • 在MySQL 8.0.28及更高版本中,使用以下任何字符集或它们的排序规则的方式将产生弃用警告,包括以下情况:

    • 在MySQL 8.0.28及更高版本中,在以下情况下使用任何字符集或排序规则将产生弃用警告:

    • 启动MySQL服务器时使用--character-set-server或--collation-server标志

    • 在任何SQL语句中指定,包括但不限于CREATE TABLE、CREATE DATABASE、SET NAMES和ALTER TABLE

    • 你应该使用utf8mb4代替之前列出的任何字符集。

      用户定义的排序规则已被弃用。从MySQL 8.0.33开始,以下任一情况将导致警告写入日志:

    • 在任何SQL语句中使用COLLATE关键字和用户定义的排序规则的名称

    • 将用户定义的排序规则的名称用作collation_server、collation_database或collation_connection的值

    • 你应该预计在未来的MySQL版本中将移除对用户定义的排序规则的支持。

  • 因为caching_sha2_password是MySQL 8.0中默认的身份验证插件,并提供了sha256_password身份验证插件的功能,所以sha256_password已被弃用;预计在将来的MySQL版本中将移除它。使用sha256_password进行身份验证的MySQL帐户应该迁移到使用caching_sha2_password进行身份验证。

  • validate_password插件已经重新实现,使用组件基础架构。插件形式的validate_password仍然可用,但已被弃用;预计在将来的MySQL版本中将移除它。使用该插件的MySQL安装应该转而使用组件进行过渡。

  • ALTER TABLESPACE和DROP TABLESPACE语句中的ENGINE子句已被弃用。

  • PAD_CHAR_TO_FULL_LENGTH SQL模式已被弃用。

  • 对于FLOAT和DOUBLE类型(以及任何同义词)的列,AUTO_INCREMENT支持已被弃用。考虑删除这些列的AUTO_INCREMENT属性,或将其转换为整数类型。

  • 对于FLOAT、DOUBLE和DECIMAL(以及任何同义词)类型的列,UNSIGNED属性已被弃用。考虑为这些列使用简单的CHECK约束。

  • 对于类型为FLOAT和DOUBLE(以及任何同义词)的列,使用FLOAT(M,D)和DOUBLE(M,D)语法来指定数字的位数是非标准的MySQL扩展。此语法已被弃用。

  • 对于数值数据类型,ZEROFILL属性已被弃用,整数数据类型的显示宽度属性也是如此。考虑使用其他方法来实现这些属性的效果。例如,应用程序可以使用LPAD()函数来在数字前添加零以达到所需的宽度,或者可以将格式化后的数字存储在CHAR列中。

  • 对于字符串数据类型,BINARY属性是一个非标准的MySQL扩展,它是指定列字符集(或如果未指定列字符集,则指定表默认字符集)的二进制(_bin)排序规则的简写。在MySQL 8.0中,对BINARY的这种非标准使用是含糊的,因为utf8mb4字符集有多个_bin排序规则,所以BINARY属性已经被弃用;预计在将来的MySQL版本中将移除对它的支持。应该调整应用程序,改为使用显式的_bin排序规则。使用BINARY来指定数据类型或字符集的用法保持不变,未被弃用。

  • 在先前的MySQL版本中,分别支持非标准的简写表达式ASCII和UNICODE,用于表示CHARACTER SET latin1和CHARACTER SET ucs2。但是从MySQL 8.0.28版本开始,这两个简写方式已经被弃用,并会产生警告。在这两种情况下,请改用CHARACTER SET来表示。

  • 非标准的C风格运算符&&、||和!分别是标准SQL的AND、OR和NOT运算符的同义词,已被弃用。使用这些非标准运算符的应用程序应该调整为使用标准运算符。

    除非启用了PIPES_AS_CONCAT SQL模式,否则不推荐使用||运算符。在这种情况下,||表示标准的字符串连接运算符。

  • JSON_MERGE()函数已被弃用,请改用JSON_MERGE_PRESERVE()函数来替代。

  • SQL_CALC_FOUND_ROWS查询修饰符和相应的FOUND_ROWS()函数已被弃用。有关替代策略的信息,请参阅FOUND_ROWS()的描述。

  • 自MySQL 8.0.13版本起,使用CREATE TEMPORARY TABLE时,对于TABLESPACE=innodb_file_per_table和TABLESPACE=innodb_temporary子句的支持已经被弃用。

  • 自MySQL 8.0.20版本开始,对于SELECT语句,在FROM之后而不是在SELECT语句末尾使用INTO子句已被弃用。更推荐将INTO子句放置在语句的末尾。

    对于UNION语句,以下两种包含INTO的写法在MySQL 8.0.20版本中已被弃用:

    • 在查询表达式的尾部查询块中,在FROM之前使用INTO。

    • 在查询表达式的带括号的尾部块中,无论INTO位于FROM之前还是之后,都已被弃用。

  • 自MySQL 8.0.23版本开始,FLUSH HOSTS已被弃用。相反,应该使用TRUNCATE语句截断Performance Schema的host_cache表。

    sql 复制代码
    TRUNCATE TABLE performance_schema.host_cache;

    TRUNCATE TABLE操作需要对表具有DROP权限。

  • mysql_upgrade客户端已被弃用,因为它升级mysql系统模式中的系统表和其他模式中的对象的能力已经移入MySQL服务器中。

  • --no-dd-upgrade服务器选项已被弃用。它已被--upgrade选项取代,该选项提供对数据字典和服务器升级行为更精细的控制。

  • mysql_upgrade_info文件位于数据目录下,用于存储MySQL版本号。该文件已被弃用,并有可能在未来的MySQL版本中移除。

  • relay_log_info_file系统变量和--master-info-file选项已被弃用。以前,当设置relay_log_info_repository=FILE和master_info_repository=FILE时,它们用于指定中继日志信息日志和源信息日志的名称,但是这些设置已被弃用。中继日志信息日志和源信息日志使用文件的方式已被crash-safe副本表取代,默认为MySQL 8.0版本中的默认设置。

相关推荐
指尖下的技术2 小时前
Mysql面试题----MyISAM和InnoDB的区别
数据库·mysql
指尖下的技术3 小时前
Mysql面试题----为什么B+树比B树更适合实现数据库索引
数据结构·数据库·b树·mysql
Ciderw3 小时前
MySQL为什么使用B+树?B+树和B树的区别
c++·后端·b树·mysql·面试·golang·b+树
胡耀超5 小时前
CentOS 7.9(linux) 设置 MySQL 8.0.30 开机启动详解
linux·mysql·centos
计算机学姐8 小时前
基于微信小程序的民宿预订管理系统
java·vue.js·spring boot·后端·mysql·微信小程序·小程序
web2u11 小时前
MySQL 中如何进行 SQL 调优?
java·数据库·后端·sql·mysql·缓存
新知图书12 小时前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全
文城52112 小时前
Mysql存储过程(学习自用)
数据库·学习·mysql
沉默的煎蛋12 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
C语言扫地僧13 小时前
MySQL 事务及MVCC机制详解
数据库·mysql