以下项目已经过时并在MySQL 8.0中被删除。如果有替代方案,请务必更新应用程序以使用这些替代方案。
对于在MySQL 8.0中被删除的功能,如果从MySQL 5.7源复制到MySQL 8.0副本时,可能会导致语句失败,或者在源和副本上产生不同的效果。为了避免这样的问题,使用在MySQL 8.0中被删除功能的应用程序应进行修订,以避免使用这些功能,并尽可能使用替代方案。
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
?系统变量是多余的,并已被移除。?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
?选项也已被移除。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
?。