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版本中的默认设置。

相关推荐
lwprain21 分钟前
常用docker应用部署,wordpress、mysql、tomcat、nginx、redis
mysql·docker·tomcat
斗-匕1 小时前
MySQL 三大日志详解
数据库·mysql·oracle
代码中の快捷键1 小时前
MySQL数据库存储引擎
数据库·mysql
六月闻君2 小时前
MySQL 报错:1137 - Can‘t reopen table
数据库·mysql
白云如幻2 小时前
SQL99版链接查询语法
数据库·sql·mysql
爱吃烤鸡翅的酸菜鱼3 小时前
MySQL初学之旅(4)表的设计
数据库·sql·mysql·database
计算机毕设指导63 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
打鱼又晒网5 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
tatasix6 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
天海华兮6 小时前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql