以下功能在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表。
sqlTRUNCATE 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版本中的默认设置。