MySQL 8.0中移除的功能(一)

以下项目已经过时并在MySQL 8.0中被删除。如果有替代方案,请务必更新应用程序以使用这些替代方案。

对于在MySQL 8.0中被删除的功能,如果从MySQL 5.7源复制到MySQL 8.0副本时,可能会导致语句失败,或者在源和副本上产生不同的效果。为了避免这样的问题,使用在MySQL 8.0中被删除功能的应用程序应进行修订,以避免使用这些功能,并尽可能使用替代方案。

  • innodb_locks_unsafe_for_binlog系统变量已被移除。 READ COMMITTED隔离级别提供了类似的功能。
  • MySQL 8.0.0引入的information_schema_stats变量已被移除,并在MySQL 8.0.3中被information_schema_stats_expiry取代。
    information_schema_stats_expiry用于定义缓存的INFORMATION_SCHEMA表统计信息的过期设置。
  • 与已过时的InnoDB系统表相关的代码已在MySQL 8.0.3中移除。
    基于InnoDB系统表的INFORMATION_SCHEMA视图已被内部系统视图替代,这些视图基于数据字典表。受影响的InnoDB INFORMATION_SCHEMA视图已被重新命名:
    Old Name New Name
    INNODB_SYS_COLUMNS INNODB_COLUMNS
    INNODB_SYS_DATAFILES INNODB_DATAFILES
    INNODB_SYS_FIELDS INNODB_FIELDS
    INNODB_SYS_FOREIGN INNODB_FOREIGN
    INNODB_SYS_FOREIGN_COLS INNODB_FOREIGN_COLS
    INNODB_SYS_INDEXES INNODB_INDEXES
    INNODB_SYS_TABLES INNODB_TABLES
    INNODB_SYS_TABLESPACES INNODB_TABLESPACES
    INNODB_SYS_TABLESTATS INNODB_TABLESTATS
    INNODB_SYS_VIRTUAL INNODB_VIRTUAL

    在升级到MySQL 8.0.3或更高版本后,需要更新任何引用先前的InnoDB INFORMATION_SCHEMA视图名称的脚本。

  • 以下与账户管理相关的功能已被移除:

    • 使用 ​CREATE USER​代替 ​GRANT​来创建用户。遵循这种做法使 ​NO_AUTO_CREATE_USER​ SQL模式对 ​GRANT​语句无效,因此该模式也已被移除。当在选项文件中的 ​sql_mode​选项中存在 ​NO_AUTO_CREATE_USER​值阻止 ​mysqld​启动时,现在会将错误写入服务器日志。

    • 使用 ​GRANT​语句来修改账户属性,包括身份验证、SSL和资源限制属性,已被移除。相反,在创建账户时,可以使用 ​CREATE USER​语句来设置这些属性,或者使用 ​ALTER USER​语句在创建后修改它们。

    • 在MySQL中,​IDENTIFIED BY PASSWORD 'auth_string'​语法用于 ​CREATE USER​和 ​GRANT​语句已被移除。相反,现在可以使用 ​IDENTIFIED WITH auth_plugin AS 'auth_string'​来替代,在 ​CREATE USER​和 ​ALTER USER​语句中使用此语法,其中的 ​'auth_string'​值采用与指定的插件兼容的格式。

      此外,由于 ​IDENTIFIED BY PASSWORD​语法已被移除,因此 ​log_builtin_as_identified_by_password​系统变量也不再需要,并已被移除。

    • PASSWORD()​函数已在MySQL中移除。这意味着您不能再使用 ​PASSWORD()​函数生成密码哈希值,也不能在 ​SET PASSWORD ... = PASSWORD('auth_string')​等语句中使用它。

    • ​old_passwords​是MySQL中的一个系统变量。 

  • 查询缓存已被移除。这个移除的行为包括以下内容:
    • ​FLUSH QUERY CACHE​和 ​RESET QUERY CACHE​语句被移除。
    • 系统变量 ​query_cache_limit​、​query_cache_min_res_unit​、​query_cache_size​、​query_cache_type​、​query_cache_wlock_invalidate​被移除。
    • 状态变量 ​Qcache_free_blocks​、​Qcache_free_memory​、​Qcache_hits​、​Qcache_inserts​、​Qcache_lowmem_prunes​、​Qcache_not_cached​、​Qcache_queries_in_cache​、​Qcache_total_blocks​被移除。
    • 线程状态 ​checking privileges on cached query​、​checking query cache for query​、​invalidating query cache entries​、​sending cached result to client​、​storing result in query cache​、​Waiting for query cache lock​被移除。
    • ​SQL_CACHE​和 ​SQL_NO_CACHE​ SELECT 参数被废弃,并且其行为不再起作用。这些参数预计在未来的MySQL版本中被移除。
    • ​ndb_cache_check_time​系统变量被废弃,并预计在未来的MySQL版本中被移除。
    • ​have_query_cache​系统变量仍然被废弃,并且始终具有NO值,预计在未来的MySQL版本中被移除。
  • 数据字典提供有关数据库对象的信息,因此服务器不再通过检查数据目录中的目录名称来查找数据库。因此,​--ignore-db-dir​选项和 ​ignore_db_dirs​系统变量是多余的,并已被移除。
  • DDL日志,也称为元数据日志,已被移除。从MySQL 8.0.3版本开始,这个功能由数据字典中的 ​innodb_ddl_log​表来处理。
  • ​tx_isolation​和 ​tx_read_only​系统变量已被移除。应使用 ​transaction_isolation​和 ​transaction_read_only​代替。
  • sync_frm​系统变量已被移除,原因是 ​.frm​文件已经过时。
  • secure_auth​系统变量和 ​--secure-auth​客户端选项已被移除。​mysql_options()​ C API函数的 ​MYSQL_SECURE_AUTH​选项也已被移除。
  • `multi_range_count`系统变量已移除。
  • log_warnings​系统变量和 ​--log-warnings​服务器选项已被移除。请使用 ​log_error_verbosity​系统变量代替。
  • sql_log_bin​系统变量的全局作用域已被移除。​sql_log_bin​只具有会话级别的作用域,依赖于访问 ​@@GLOBAL.sql_log_bin​的应用程序需要进行调整。
  • metadata_locks_cache_size​和 ​metadata_locks_hash_instances​系统变量已被移除。 
  • date_format​、​datetime_format​、​time_format​和 ​max_tmp_tables​系统变量已被移除。
  • 这些被弃用的兼容性SQL模式已被移除:DB2、MAXDB、MSSQL、MYSQL323、MYSQL40、ORACLE、POSTGRESQL、NO_FIELD_OPTIONS、NO_KEY_OPTIONS和NO_TABLE_OPTIONS。它们不再能够被分配给sql_mode系统变量,也不能作为mysqldump --compatible选项的允许值使用。

    MAXDB的移除意味着在CREATE TABLE或ALTER TABLE语句中,TIMESTAMP数据类型将被视为TIMESTAMP,而不再被视为DATETIME。

  • 已移除GROUP BY子句中的弃用ASC或DESC限定符。以前依赖于GROUP BY排序的查询可能会产生与之前的MySQL版本不同的结果。为了按照给定的排序顺序进行查询,请提供ORDER BY子句。

  • `EXPLAIN`语句的`EXTENDED`和`PARTITIONS`关键字已被移除。这些关键字是不必要的,因为它们的效果总是启用的。

  • 被移除的加密相关功能如下:
    • `ENCODE()`和`DECODE()`函数。
    • `ENCRYPT()`函数。
    • `DES_ENCRYPT()`和`DES_DECRYPT()`函数,`--des-key-file`选项,`have_crypt`系统变量,`FLUSH`语句的`DES_KEY_FILE`选项以及`HAVE_CRYPT`CMake选项。
    替代被移除的加密函数:对于`ENCRYPT()`函数,考虑改用`SHA2()`进行单向哈希;对于其他情况,考虑改用`AES_ENCRYPT()`和`AES_DECRYPT()`函数。

  • 在MySQL 5.7中,为了使空间函数的命名空间更加一致,几个具有多个名称的空间函数被标记为弃用。目标是,如果一个空间函数执行精确操作,则其函数名应以ST_开头;如果执行基于最小边界矩形的操作,则函数名应以MBR开头。在MySQL 8.0中,这些被弃用的函数被移除,只保留相应的ST_和MBR函数:

    • 这些函数已经被移除,并改用MBR名称代替:`Contains()`, `Disjoint()`, `Equals()`, `Intersects()`, `Overlaps()`, `Within()`。

    • 这些函数已被移除,并改用ST_名称替代: `Area()`, `AsBinary()`, `AsText()`, `AsWKB()`, `AsWKT()`, `Buffer()`, `Centroid()`, `ConvexHull()`, `Crosses()`, `Dimension()`, `Distance()`, `EndPoint()`, `Envelope()`, `ExteriorRing()`, `GeomCollFromText()`, `GeomCollFromWKB()`, `GeomFromText()`, `GeomFromWKB()`, `GeometryCollectionFromText()`, `GeometryCollectionFromWKB()`, `GeometryFromText()`, `GeometryFromWKB()`, `GeometryN()`, `GeometryType()`, `InteriorRingN()`, `IsClosed()`, `IsEmpty()`, `IsSimple()`, `LineFromText()`, `LineFromWKB()`, `LineStringFromText()`, `LineStringFromWKB()`, `MLineFromText()`, `MLineFromWKB()`, `MPointFromText()`, `MPointFromWKB()`, `MPolyFromText()`, `MPolyFromWKB()`, `MultiLineStringFromText()`, `MultiLineStringFromWKB()`, `MultiPointFromText()`, `MultiPointFromWKB()`, `MultiPolygonFromText()`, `MultiPolygonFromWKB()`, `NumGeometries()`, `NumInteriorRings()`, `NumPoints()`, `PointFromText()`, `PointFromWKB()`, `PointN()`, `PolyFromText()`, `PolyFromWKB()`, `PolygonFromText()`, `PolygonFromWKB()`, `SRID()`, `StartPoint()`, `Touches()`, `X()`, `Y()`。

    • GLength()​ 函数已被移除,并改用 ​ST_Length()​ 函数来代替。

  • 几何参数不再被允许,并会产生错误。请参考该部分的指南,以迁移查询并停止使用几何参数。
  • 解析器不再将 ​\N​ 视为 SQL 语句中 ​NULL​ 的同义词。请使用 ​NULL​ 代替。该更改不影响使用 ​LOAD DATA​ 或 ​SELECT ... INTO OUTFILE​ 进行的文本文件导入或导出操作,对于这些操作,仍然使用 ​\N​ 表示 ​NULL​。

你可能感兴趣的:(MySQL,mysql)