Introduction to VPS and Web Technology Development

1.3 MySQL 8.0的新特性-2

自由vps mysql8手册

用户评论和用户属性。MySQL 8.0.21引入了在创建或更新用户帐户时设置用户评论和用户属性的能力。用户注释由任意文本组成,作为参数传递给与CREATE user或ALTER user语句一起使用的注释子句。用户属性由JSON对象形式的数据组成,该数据作为参数传递给与这两个语句一起使用的属性子句。该属性可以包含JSON对象符号中任何有效的键-值对。在一条CREATE USER或ALTER USER语句中只能使用一条注释或属性。

用户评论和用户属性在内部以JSON对象的形式存储在一起,评论文本作为以comment作为键的元素的值。可以从INFORMATION_SCHEMA的属性列中检索该信息。USER_ATTRIBUTES表;因为它是JSON格式的,你可以使用MySQL的JSON函数和操作符来解析它的内容(见12.18节“JSON函数”)。当使用JSON_MERGE_PATCH()函数时,对user属性的连续更改将与当前值合并。

例子:

mysql> CREATE USER 'mary'@'localhost' COMMENT 'This is Mary Smith\'s account';
Query OK, 0 rows affected (0.33 sec)

mysql> ALTER USER 'mary'@'localhost'
    -≫     ATTRIBUTE '{"fname":"Mary", "lname":"Smith"}';
Query OK, 0 rows affected (0.14 sec)

mysql> ALTER USER 'mary'@'localhost'
    -≫     ATTRIBUTE '{"email":"mary.smith@example.com"}';
Query OK, 0 rows affected (0.12 sec)

mysql> SELECT
    ->    USER,
    ->    HOST,
    ->    ATTRIBUTE->>"$.fname" AS 'First Name',
    ->    ATTRIBUTE->>"$.lname" AS 'Last Name',
    ->    ATTRIBUTE->>"$.email" AS 'Email',
    ->    ATTRIBUTE->>"$.comment" AS 'Comment'
    -> FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    -> WHERE USER='mary' AND HOST='localhost'\G
*************************** 1. row ***************************
      USER: mary
      HOST: localhost
First Name: Mary
 Last Name: Smith
     Email: mary.smith@example.com
   Comment: This is Mary Smith's account
1 row in set (0.00 sec)


更多信息和示例,请参见13.7.1.3章节“CREATE USER Statement”、13.7.1.1章节“ALTER USER Statement”和26.46章节“INFORMATION_SCHEMA USER_ATTRIBUTES Table”。

新optimizer_switch旗帜。MySQL 8.0.21为optimizer_switch系统变量增加了两个新标志,如下表所示:

prefer_ordering_index国旗

默认情况下,MySQL会尝试在任何ORDER By或GROUP By查询中使用一个有LIMIT子句的有序索引,只要优化器认为这样可以提高执行速度。因为在某些情况下,为这样的查询选择不同的优化实际上可能会执行得更好,所以现在可以通过将prefer_ordering_index标记设置为off来禁用这种优化。

这个标志的默认值是on。

subquery_to_derived国旗

当此标志设置为on时,优化器将合格的标量子查询转换为派生表上的连接。例如,查询SELECT * FROM t1 WHERE t1。一个> (SELECT COUNT(a) FROM t2)被重写为SELECT t1。a FROM t1 JOIN (SELECT COUNT(t1. a) AS c FROM t2) AS d WHERE t1. a>特区。

这种优化可以应用于SELECT、WHERE、JOIN或HAVING子句中的子查询;包含一个或多个聚合函数,但没有GROUP BY子句;不相关的;并且不使用任何非确定性函数。

优化还可以应用于作为IN、NOT IN、EXISTS或NOT EXISTS参数的表子查询,且该子查询不包含GROUP BY。例如,查询SELECT * FROM t1 WHERE t1。b < 0或t1。a IN (SELECT t2。a + 1 FROM t2)被重写为SELECT a, b FROM t1 (SELECT DISTINCT 1 as e1, t2)a从t2开始e2) d从t1开始。a + 1 = d e2,其中t1。b < 0或d.e1不为空。

这种优化通常是禁用的,因为在大多数情况下,它不会产生显著的性能好处,因此该标志在默认情况下被设置为off。

更多信息,请参见8.9.2节“可切换优化”。参见8.2.1.19节“限制查询优化”,8.2.2.1节“用半连接转换优化IN和EXISTS子查询谓词”,8.2.2.4节“用合并或实体化优化派生表、视图引用和公共表表达式”。

XML的增强。从MySQL 8.0.21开始,LOAD XML语句现在支持要导入的XML中的CDATA部分。

现在支持将类型转换为年份类型。从MySQL 8.0.22开始,服务器允许对年份进行转换。CAST()和CONVERT()函数都支持单位、两位和四位年份值。对于一位数和两位数的值,允许的范围是0-99。四位数值必须在1901-2155的范围内。YEAR也可以用作JSON_VALUE()函数的返回类型;此函数只支持四位数字的年份。

字符串、时间和日期以及浮点值都可以被转换为年份。不支持将几何值铸造为年份。

有关更多信息(包括转换规则),请参阅CONVERT()函数的描述。

以UTC检索时间戳值。MySQL 8.0.22及以后版本支持检索时将时间戳列值从系统时区转换为UTC日期时间,使用强制转换(时区指定符为DATETIME),其中指定符为[INTERVAL] '+00:00'或'UTC'之一。如果需要,可以指定转换返回的DATETIME值的精度达到小数点后6位。此构造不支持ARRAY关键字。

还支持使用时区偏移量插入表中的时间戳值。不支持在CONVERT()或任何其他MySQL函数或构造中使用AT TIME ZONE。

有关更多信息和示例,请参见CAST()函数的描述。

转储文件输出同步。MySQL 8.0.22及以后版本支持通过SELECT INTO DUMPFILE和SELECT INTO OUTFILE语句写入文件时定时同步。这可以通过将select_into_disk_sync系统变量设置为ON来启用;写缓冲区的大小由select_into_buffer_size设置的值决定;缺省值是131072(217)字节。

此外,可以使用select_into_disk_sync_delay设置同步到磁盘后的可选延迟;默认值是没有延迟(0毫秒)。

有关更多信息,请参阅前面在本项目中引用的变量的描述。

语句的单一准备。从MySQL 8.0.22开始,预准备语句是一次性准备的,而不是每次执行时都准备一次。这是在执行PREPARE时完成的。对于存储过程中的任何语句也是如此;该语句在存储过程第一次执行时准备一次。

这种改变的结果之一是,预编译语句中使用的动态参数的解析方式也发生了变化,如下所示:

在准备语句时,为准备好的语句参数赋值一个数据类型;该类型将在语句的后续执行中持续存在(除非语句被重新准备;见后)。

在准备好的语句中,对给定的参数或用户变量使用不同的数据类型来执行第一次执行之后的语句,可能会导致语句被重新准备;因此,在重新执行预处理语句时,建议对给定参数使用相同的数据类型。

为了符合SQL标准,以下使用窗口函数的结构不再被接受:


NTILE(空)

NTH_VALUE (expr NULL)

LEAD(expr, nn)和LAG(expr, nn),其中nn为负数

这有助于更好地遵守SQL标准。请参阅各个函数的描述以了解更多细节。

在准备好的语句中引用的用户变量的数据类型现在在语句准备好时确定了;该类型将在语句的后续执行中持续存在。

存储过程中语句引用的用户变量在第一次执行语句时就确定了其数据类型;对于后续对包含该存储过程的任何调用,该类型都将持久化。

当执行SELECT expr1, expr2,…在ORDER BY ?表中,为参数传递一个整数值N不再导致结果按选择列表中的第N个表达式排序;结果不再是有序的,正如使用ORDER BY constant所期望的那样。

将一条语句作为预备语句或只在存储过程中使用一次,可以提高语句的性能,因为它抵消了重复准备所增加的成本。这样做还可以避免可能的多次回滚准备结构,这是MySQL中许多问题的根源。

要了解更多信息,请参见13.5.1节“PREPARE Statement”。

右连接作为左连接处理。在MySQL 8.0.22中,服务器在内部将所有的RIGHT JOIN实例处理为LEFT JOIN,消除了许多在解析时没有执行完整转换的特殊情况。

导出条件下推优化。MySQL 8.0.22(及以后版本)实现了具有物化派生表的查询的派生条件下推。等查询SELECT * FROM(选择i, j从t1) dt我>常数,现在可以在许多情况下,推动外部条件下派生表,在这种情况下导致SELECT * FROM(选择i, j从t1我>常数)dt。

以前,如果派生的表被物化而没有合并,MySQL将物化整个表,然后用WHERE条件限定行。使用派生条件下推优化将WHERE条件移动到子查询中通常可以减少必须处理的行数,从而减少执行查询所需的时间。

当派生表不使用任何聚合或窗口函数时,外部WHERE条件可以直接下推到物化派生表。当派生表有一个GROUP BY且不使用任何窗口函数时,外部WHERE条件可以作为HAVING条件下推到派生表。当派生表使用窗口函数和外部WHERE引用窗口函数的PARTITION子句中使用的列时,WHERE条件也可以下推。

派生条件下推是默认启用的,由optimizer_switch系统变量的derived_condition_pushdown标志表明。MySQL 8.0.22中添加的标志默认设置为on;要禁用对特定查询的优化,可以使用NO_DERIVED_CONDITION_PUSHDOWN优化器提示(在MySQL 8.0.22中也添加了)。如果由于将derived_condition_pushdown设置为off而禁用了优化,则可以使用derived_condition_pushdown为给定查询启用优化。

派生条件下推优化不能用于包含UNION或LIMIT子句的派生表。此外,本身使用子查询的条件不能下推,WHERE条件也不能下推到也是外部连接的内部表的派生表。有关更多信息和示例,请参见8.2.2.5节“导出的条件下推优化”。

对MySQL grant表进行非锁定读取。从MySQL 8.0.22开始,为了允许并发的DML和DDL操作在MySQL grant表上,之前在MySQL grant表上获得行锁的读操作将作为非锁定的读执行。

现在在MySQL grant表上执行的非锁定读操作包括:

SELECT语句和其他通过join列表和子查询从grant表中读取数据的只读语句,包括SELECT…对于共享语句,使用任何事务隔离级别。

DML操作(通过连接列表或子查询)从授予表读取数据,但不修改它们,使用任何事务隔离级别。

有关其他信息,请参见授予表并发性。



MySQL 8.0中已弃用的特性

以下特性在MySQL 8.0中已弃用,可能会在未来的系列中删除。在显示备选方案的地方,应该更新应用程序以使用它们。

对于那些使用了在MySQL 8.0中弃用而在更高版本中已经被删除的特性的应用程序,当从MySQL 8.0源代码复制到更高版本的副本时,语句可能会失败,或者对源代码和副本可能有不同的影响。为了避免此类问题,使用8.0中弃用特性的应用程序应该进行修改,以避免使用这些特性,并在可能的情况下使用替代特性。

utf8mb3字符集已弃用。请使用utf8mb4代替。

因为caching_sha2_password是MySQL 8.0中默认的认证插件,并且提供了sha256_password认证插件的超集功能,所以sha256_password已被弃用;希望它在未来的MySQL版本中被删除。使用sha256_password进行验证的MySQL帐户应该迁移为使用caching_sha2_password。

重新实现了validate_password插件,以使用组件基础设施。插件形式的validate_password仍然可用,但现在已弃用;希望它在未来的MySQL版本中被删除。使用插件的MySQL安装应该转换为使用组件。参见第6.4.3.3节,“过渡到密码验证组件”。

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

PAD_CHAR_TO_FULL_LENGTH SQL模式已弃用。

不赞成对FLOAT和DOUBLE类型的列(以及任何同义词)支持自增。考虑从这些列中删除AUTO_INCREMENT属性,或者将它们转换为整数类型。

对于FLOAT、DOUBLE和DECIMAL类型的列(以及任何同义词),不赞成使用UNSIGNED属性。考虑对这样的列使用一个简单的检查约束。

FLOAT(M,D)和DOUBLE(M,D)语法指定类型为FLOAT和DOUBLE(以及任何同义词)的列的数字数量是一个非标准的MySQL扩展。此语法已弃用。

ZEROFILL属性不赞成用于数字数据类型,整数数据类型的显示宽度属性也不赞成使用。考虑使用另一种方法来产生这些属性的效果。例如,应用程序可以使用LPAD()函数将数字零填充到所需的宽度,或者它们可以将格式化后的数字存储在CHAR列中。

对于字符串数据类型,BINARY属性是一个非标准的MySQL扩展,用于指定列字符集的二进制(_bin)排序(如果没有指定列字符集,则指定表的默认字符集)。在MySQL 8.0中,这种对BINARY的非标准使用是二义性的,因为utf8mb4字符集有多个_bin排序规则,所以BINARY属性是不支持的;在未来的MySQL版本中将会删除对它的支持。应用程序应该调整为使用显式的_bin排序规则。

使用二进制来指定数据类型或字符集保持不变。

非标准的C-style &&, ||和!分别是标准SQL和、OR和NOT操作符同义词的操作符已弃用。使用非标准操作符的应用程序应该调整为使用标准操作符。


请注意

不建议使用||,除非启用了PIPES_AS_CONCAT SQL模式。在这种情况下,||表示sql标准的字符串连接操作符)。

JSON_MERGE()函数已弃用。使用JSON_MERGE_PRESERVE()。

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

在MySQL 8.0.13版本中,CREATE TEMPORARY TABLE不支持表空间= innodb_file_per_table和表空间= innodb_temporary。

对于SELECT语句,在FROM后面而不是SELECT后面使用INTO子句在MySQL 8.0.20中已被弃用。最好将INTO放在语句的末尾。

对于UNION语句,这两个包含INTO的变量在MySQL 8.0.20中已经弃用:

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

在查询表达式的圆括号末尾块中,使用INTO,而不考虑其相对于FROM的位置。

参见章节13.2.10.1,“选择…”并入声明”和第13.2.10.3条“联合条款”。

FLUSH HOSTS在MySQL 8.0.23中已弃用。相反,要截断性能模式host_cache表:

TRUNCATE TABLE performance_schema.host_cache;


参见章节13.2.10.1,“选择…”并入声明”和第13.2.10.3条“联合条款”。

FLUSH HOSTS在MySQL 8.0.23中已弃用。相反,要截断性能模式host_cache表:

截断表performance_schema.host_cache;

TRUNCATE TABLE操作需要该表的DROP特权。

mysql_upgrade客户端已经被弃用,因为它升级mysql系统模式中的系统表和其他模式中的对象的能力已经被移到了mysql服务器中。参见2.11.3节“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时,它们用于指定中继日志info日志和源信息日志的名称,但这些设置已经弃用。relay log info log和source info log使用的文件已经被crash-safe replica tables取代,这是MySQL 8.0的默认配置。

max_length_for_sort_data系统变量现在已弃用,因为优化器的更改使其过时且没有效果。

这些用于压缩连接到服务器的旧参数已被弃用:mysql_options() C API函数的opt_compress选项;slave_compressed_protocol系统变量。有关使用替代参数的信息,请参见4.2.8节“连接压缩控制”。

不建议使用MYSQL_PWD环境变量来指定MySQL密码。

using VALUES() to access new row VALUES in INSERT…ON DUPLICATE KEY UPDATE在MySQL 8.0.20中已弃用。相反,请为新行和新列使用别名。

因为在调用JSON_TABLE()时在ON EMPTY之前指定ON ERROR是违反SQL标准的,所以现在在MySQL中已弃用此语法。从MySQL 8.0.20开始,每当您尝试这样做时,服务器都会打印一个警告。当在单个JSON_TABLE()调用中指定这两个子句时,请确保首先使用ON EMPTY。

不支持带索引前缀的列作为表的分区键的一部分;以前,当创建、修改或升级已分区表时,这些操作是允许的,但是表的分区函数会将其排除,并且服务器不会发出警告。这种允许的行为现在已被弃用,在未来的MySQL版本中,如果在分区键中使用任何这样的列,就会导致CREATE TABLE或ALTER TABLE语句被拒绝。

从MySQL 8.0.21开始,无论何时使用索引前缀的列被指定为分区键的一部分,都会为每个这样的列生成一个警告。每当由于建议的分区键中的所有列都有索引前缀而拒绝CREATE TABLE或ALTER TABLE语句时,所产生的错误现在提供了拒绝的确切原因。在这两种情况中,都包括这样的情况:分区函数中使用的列通过使用空PARTITION by key()子句隐式地定义为表主键中的列。

有关更多信息和示例,请参见不支持键分区的列索引前缀。

InnoDB memcached插件在MySQL 8.0.22版本中已经被弃用;在未来的MySQL版本中将会删除对它的支持。


MySQL 8.0中删除的特性

以下内容已经过时,在MySQL 8.0中已经被删除。在显示备选方案的地方,应该更新应用程序以使用它们。

对于使用了在MySQL 8.0中删除的特性的MySQL 5.7应用程序,当从MySQL 5.7源文件复制到MySQL 8.0副本时,语句可能会失败,或者对源文件和副本有不同的影响。为了避免这些问题,使用MySQL 8.0中删除的特性的应用程序应该修改以避免它们,并在可能的情况下使用替代方案。

innodb_locks_unsafe_for_binlog系统变量被删除。读取提交隔离级别提供了类似的功能。

MySQL 8.0.0中引入的information_schema_stats变量被删除,并被MySQL 8.0.3中的information_schema_stats_expiry所取代。

information_schema_stats_expiry定义缓存的INFORMATION_SCHEMA表统计信息的过期设置。有关更多信息,请参见8.2.3节“优化INFORMATION_SCHEMA查询”。

MySQL 8.0.3中删除了废弃的InnoDB系统表相关的代码。基于InnoDB系统表的INFORMATION_SCHEMA视图替换为数据字典表的内部系统视图。受影响的InnoDB INFORMATION_SCHEMA视图被重命名:

表1.1重命名的InnoDB信息模式视图

旧名称新名称

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视图名的脚本。

删除以下与帐户管理相关的特性:

使用GRANT创建用户。相反,使用CREATE USER。按照这种做法,NO_AUTO_CREATE_USER SQL模式对于GRANT语句来说并不重要,因此它也被删除,并且当options文件中sql_mode选项的这个值阻止mysqld启动时,一个错误现在被写入服务器日志。

使用GRANT来修改帐户属性,而不是特权分配。这包括身份验证、SSL和资源限制属性。相反,可以在创建帐户时使用CREATE USER建立这些属性,或者在创建帐户后使用ALTER USER修改它们。

通过密码'auth_string'识别创建用户和授权的语法。相反,在CREATE USER和ALTER USER中使用IDENTIFIED WITH auth_plugin作为'auth_string',其中'auth_string'值的格式与命名插件兼容。

此外,由于已删除IDENTIFIED BY PASSWORD语法,log_builtin_as_identified_by_password系统变量是多余的,因此已删除。

密码()函数。此外,PASSWORD()删除意味着SET PASSWORD…= PASSWORD('auth_string')语法不再可用。

系统变量old_passwords。


查询缓存被删除。删除包括以下项目:

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。

这些线程状态:检查缓存的查询权限,检查查询缓存是否被查询,使查询缓存项失效,将缓存的结果发送给客户端,将结果存储在查询缓存中,等待查询缓存锁定。

SQL_CACHE选择修饰符。

这些已弃用的查询缓存项仍然是弃用的,但没有效果;期望在未来的MySQL版本中删除它们:

SQL_NO_CACHE选择修饰符。

系统变量ndb_cache_check_time。

have_query_cache系统变量保持弃用状态,并始终为NO;希望它在未来的MySQL版本中被删除。

数据字典提供关于数据库对象的信息,因此服务器不再检查数据目录中的目录名来查找数据库。因此,——ignore-db-dir选项和ignore_db_dirs系统变量是无关的,并且会被删除。

DDL日志,也称为元数据日志,已经被删除。从MySQL 8.0.3开始,这个功能由数据字典innodb_ddl_log表来处理。请参见查看DDL日志。

已经删除了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的时间戳数据类型被视为时间戳,而不再被视为DATETIME。


已弃用的GROUP BY子句的ASC或DESC限定符被删除。以前依赖分组排序的查询可能产生不同于以前MySQL版本的结果。要生成给定的排序顺序,请提供order BY子句。

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

这些加密相关的项目被删除:

ENCODE()和DECODE()函数。

加密()函数。

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_名称:面积(),AsBinary (), AsText (), AsWKB (), AsWKT(),缓冲(),重心(),ConvexHull(),穿过(),维度(),(),距离端点(),(),信封外(),GeomCollFromText (), GeomCollFromWKB (), GeomFromText (), GeomFromWKB (), GeometryCollectionFromText (), GeometryCollectionFromWKB (), GeometryFromText (), GeometryFromWKB (), GeometryN (), GeometryType (), InteriorRingN(),关闭(),IsEmpty (), IsSimple (), LineFromText (), LineFromWKB (), LineStringFromText (), LineStringFromWKB (), MLineFromText (),MPointFromText MLineFromWKB (), (), MPointFromWKB (), MPolyFromText (), MPolyFromWKB (), MultiLineStringFromText (), MultiLineStringFromWKB (), MultiPointFromText (), MultiPointFromWKB (), MultiPolygonFromText (), MultiPolygonFromWKB (), NumGeometries (), NumInteriorRings (), NumPoints (), PointFromText (), PointFromWKB (), PointN (), PolyFromText (), PolyFromWKB (), PolygonFromText (), PolygonFromWKB (), SRID(),曾经繁荣(),触摸(),X(),()。

移除GLength(),改用ST_Length()。


第12.17.4节中描述的函数“从WKB值创建几何值的函数”以前接受WKB字符串或几何参数。不再允许几何参数,并产生错误。有关从使用几何参数迁移查询的指导原则,请参阅该部分。

解析器不再将\N视为SQL语句中NULL的同义词。使用NULL代替。

此更改不会影响使用加载数据或SELECT…在OUTFILE中,NULL继续由\N表示。参见13.2.7节“加载数据语句”。

删除过程分析()语法。

客户端——ssl和——ssl-verify-server-cert选项已被删除。使用——ssl-mode=REQUIRED代替——ssl=1或——enable-ssl。使用——ssl-mode=DISABLED代替——ssl=0,——skip-ssl或——disable-ssl。使用——ssl-mode=VERIFY_IDENTITY代替——ssl-verify-server-cert选项。(服务器端——ssl选项保持不变。)

对于C API, MYSQL_OPT_SSL_ENFORCE和MYSQL_OPT_SSL_VERIFY_SERVER_CERT选项对应客户端——ssl和——ssl-verify-server-cert选项并被删除。使用MYSQL_OPT_SSL_MODE和SSL_MODE_REQUIRED或SSL_MODE_VERIFY_IDENTITY选项代替。

删除了——temp-pool服务器选项。

系统变量ignore_builtin_innodb被删除。

服务器不再执行包含特殊字符的pre-MySQL 5.1数据库名到添加了#mysql50#前缀的5.1格式的转换。由于不再执行这些转换,mysqlcheck的——fix-db-names和——fix-table-names选项、ALTER DATABASE语句的UPGRADE DATA DIRECTORY NAME子句和Com_alter_db_upgrade状态变量都会被删除。

只支持从一个主版本升级到另一个主版本(例如,5.0到5.1,或5.1到5.5),因此应该不需要将旧的5.0数据库名转换为当前版本的MySQL。作为一个解决方案,在升级到最新版本之前,先将MySQL 5.0安装升级到MySQL 5.1。

mysql_install_db程序已经从MySQL发行版中删除。数据目录初始化应该通过使用——initialize或——initialize-insecure选项调用mysqld来执行。此外,删除了mysql_install_db使用的mysqld的——bootstrap选项,以及控制mysql_install_db安装位置的INSTALL_SCRIPTDIR CMake选项。

从MySQL服务器上删除了通用分区处理程序。为了支持给定表的分区,用于该表的存储引擎现在必须提供自己的(“本机”)分区处理程序。从MySQL服务器上删除了——partition和——skip-partition选项,与分区相关的条目不再显示在SHOW PLUGINS的输出或INFORMATION_SCHEMA中。插件表。

目前有两个MySQL存储引擎提供本地分区支持:InnoDB和NDB。其中,MySQL 8.0只支持InnoDB。在MySQL 8.0中,任何使用其他存储引擎创建分区表的尝试都会失败。

升级的影响。不支持使用非InnoDB(如MyISAM)的存储引擎将分区表从MySQL 5.7(或更早版本)升级到MySQL 8.0。处理这样的表有两种选择:


使用ALTER table…删除表的分区删除分区。

修改表的存储引擎为InnoDB,使用ALTER table…引擎= INNODB。

在将服务器升级到MySQL 8.0之前,必须对每个分区的非innodb表执行以上两个操作中的至少一个。否则,升级后将无法使用该表。

因为表创建语句将导致分区表使用一个存储引擎没有分区的支持现在失败的错误(ER_CHECK_NOT_IMPLEMENTED),您必须确保转储文件中的任何语句(例如,mysqldump写的)从一个旧版本的MySQL,您希望导入的MySQL 8.0服务器创建分区表还不指定一个存储引擎如MyISAM没有本地分区处理程序。你可以通过以下任意一种方式来实现这一点:

从CREATE TABLE语句中删除所有使用存储引擎选项值而不是InnoDB的对分区的引用。

指定存储引擎为InnoDB,或者默认允许InnoDB作为表的存储引擎。

有关更多信息,请参见24.6.2节,“与存储引擎相关的分区限制”。

系统和状态变量信息不再维护在INFORMATION_SCHEMA中。这些表被删除:GLOBAL_VARIABLES, SESSION_VARIABLES, GLOBAL_STATUS, SESSION_STATUS。而是使用相应的性能模式表。参见第27.12.14节“性能模式系统变量表”和第27.12.15节“性能模式状态变量表”。此外,删除了show_compatibility_56系统变量。在过渡期间,INFORMATION_SCHEMA表中的系统和状态变量信息被转移到性能模式表中,不再需要使用它。这些状态变量被删除:Slave_heartbeat_period、Slave_last_heartbeat、Slave_received_heartbeats、Slave_retried_transactions、Slave_running。它们提供的信息在性能模式表中可用;参见迁移到性能模式系统和状态变量表。

性能模式setup_timers表被删除,performance_timers表中的TICK行也被删除。

libmysqld嵌入式服务器库被移除,包括:

mysql_options() MYSQL_OPT_GUESS_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, MYSQL_OPT_USE_REMOTE_CONNECTION,和MYSQL_SET_CLIENT_IP选项

mysql_config——libmysqld-libs,——embedded-libs和——embedded选项

CMake WITH_EMBEDDED_SERVER、WITH_EMBEDDED_SHARED_LIBRARY和INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR选项

(未归档的)mysql—server-arg选项

mysqltest——embedded-server、——server-arg和——server-file选项

mysqltest_embedded和mysql_client_test_embedded测试程序

mysql_plugin实用程序被删除。备选方案包括在服务器启动时使用——PLUGIN -load或——PLUGIN -load-add选项加载插件,或者在运行时使用INSTALL PLUGIN语句加载插件。

resolveip实用程序被删除。可以使用nslookup、host或dig。

resolve_stack_dump实用程序被移除。官方MySQL构建的堆栈跟踪总是用符号表示的,所以不需要使用resolve_stack_dump。

以下服务器错误码未被使用,已被删除。专门针对这些错误进行测试的应用程序应该被更新。

ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE


ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE
ER_BINLOG_ROW_RBR_TO_SBR
ER_BINLOG_ROW_WRONG_TABLE_DEF
ER_CANT_ACTIVATE_LOG
ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION
ER_CANT_CREATE_FEDERATED_TABLE
ER_CANT_CREATE_SROUTINE
ER_CANT_DELETE_FILE
ER_CANT_GET_WD
ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF
ER_CANT_SET_WD
ER_CANT_WRITE_LOCK_LOG_TABLE
ER_CREATE_DB_WITH_READ_LOCK
ER_CYCLIC_REFERENCE
ER_DB_DROP_DELETE
ER_DELAYED_NOT_SUPPORTED
ER_DIFF_GROUPS_PROC
ER_DISK_FULL
ER_DROP_DB_WITH_READ_LOCK
ER_DROP_USER
ER_DUMP_NOT_IMPLEMENTED
ER_ERROR_DURING_CHECKPOINT
ER_ERROR_ON_CLOSE
ER_EVENTS_DB_ERROR
ER_EVENT_CANNOT_DELETE
ER_EVENT_CANT_ALTER
ER_EVENT_COMPILE_ERROR
ER_EVENT_DATA_TOO_LONG
ER_EVENT_DROP_FAILED
ER_EVENT_MODIFY_QUEUE_ERROR
ER_EVENT_NEITHER_M_EXPR_NOR_M_AT
ER_EVENT_OPEN_TABLE_FAILED
ER_EVENT_STORE_FAILED
ER_EXEC_STMT_WITH_OPEN_CURSOR
ER_FAILED_ROUTINE_BREAK_BINLOG
ER_FLUSH_MASTER_BINLOG_CLOSED
ER_FORM_NOT_FOUND
ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSED
ER_FRM_UNKNOWN_TYPE
ER_GOT_SIGNAL
ER_GRANT_PLUGIN_USER_EXISTS
ER_GTID_MODE_REQUIRES_BINLOG
ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST
ER_HASHCHK
ER_INDEX_REBUILD
ER_INNODB_NO_FT_USES_PARSER
ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR
ER_LOAD_DATA_INVALID_COLUMN_UNUSED
ER_LOGGING_PROHIBIT_CHANGING_OF
ER_MALFORMED_DEFINER
ER_MASTER_KEY_ROTATION_ERROR_BY_SE
ER_NDB_CANT_SWITCH_BINLOG_FORMAT
ER_NEVER_USED
ER_NISAMCHK
ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR
ER_NO_FILE_MAPPING
ER_NO_GROUP_FOR_PROC
ER_NO_RAID_COMPILED
ER_NO_SUCH_KEY_VALUE
ER_NO_SUCH_PARTITION__UNUSED
ER_OBSOLETE_CANNOT_LOAD_FROM_TABLE
ER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED
ER_ORDER_WITH_PROC
ER_PARTITION_SUBPARTITION_ERROR
ER_PARTITION_SUBPART_MIX_ERROR
ER_PART_STATE_ERROR
ER_PASSWD_LENGTH
ER_QUERY_ON_MASTER
ER_RBR_NOT_AVAILABLE
ER_SKIPPING_LOGGED_TRANSACTION
ER_SLAVE_CHANNEL_DELETE
ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT
ER_SLAVE_MUST_STOP
ER_SLAVE_WAS_NOT_RUNNING
ER_SLAVE_WAS_RUNNING
ER_SP_GOTO_IN_HNDLR
ER_SP_PROC_TABLE_CORRUPT
ER_SQL_MODE_NO_EFFECT
ER_SR_INVALID_CREATION_CTX
ER_TABLE_NEEDS_UPG_PART
ER_TOO_MUCH_AUTO_TIMESTAMP_COLS
ER_UNEXPECTED_EOF
ER_UNION_TABLES_IN_DIFFERENT_DIR
ER_UNSUPPORTED_BY_REPLICATION_THREAD
ER_UNUSED1
ER_UNUSED2
ER_UNUSED3
ER_UNUSED4
ER_UNUSED5
ER_UNUSED6
ER_VIEW_SELECT_DERIVED_UNUSED
ER_WRONG_MAGIC
ER_WSAS_FAILED

已弃用的INFORMATION_SCHEMA INNODB_LOCKS和INNODB_LOCK_WAITS表被删除。使用性能模式data_locks和data_lock_waits表代替。

请注意

在MySQL 5.7中,INNODB_LOCKS表中的LOCK_TABLE列,sys schema下的innodb_lock_waits和x$innodb_lock_waits视图中的locked_table列包含了组合的模式/表名值。在MySQL 8.0中,data_locks表和sys schema视图包含单独的模式名列和表名列。参见28.4.3.9节,“innodb_lock_waits和x$innodb_lock_waits视图”。

InnoDB不再支持压缩临时表。当启用innodb_strict_mode(默认)时,如果指定ROW_FORMAT=COMPRESSED或KEY_BLOCK_SIZE, CREATE TEMPORARY TABLE将返回错误。如果innodb_strict_mode被禁用,则会发出警告,并使用非压缩行格式创建临时表。

当在MySQL数据目录之外创建表空间数据文件时,InnoDB不再创建.isl文件(InnoDB符号链接文件)。innodb_directories选项现在支持定位在数据目录之外创建的表空间文件。

通过这种更改,不再支持在服务器离线时通过手动修改.isl文件来移动远程表空间。现在,innodb_directories选项支持移动远程表空间文件。参见15.6.3.6章节“在服务器离线时移动表空间文件”。

以下InnoDB文件格式变量被删除:

innodb_file_format

innodb_file_format_check

innodb_file_format_max

innodb_large_prefix

文件格式变量是MySQL 5.1中创建兼容早期InnoDB版本的表所必需的。现在MySQL 5.1已经达到了它的产品生命周期的终点,这些选项不再需要了。

从INNODB_TABLES和INNODB_TABLESPACES信息模式表中删除FILE_FORMAT列。

innodb_support_xa系统变量被删除,该变量支持在XA事务中进行两阶段提交。InnoDB始终支持XA事务中的两阶段提交。

删除了对DTrace的支持。

删除了JSON_APPEND()函数。使用JSON_ARRAY_APPEND()。


MySQL 8.0.13中删除了在共享InnoDB表空间中放置表分区的支持。共享表空间包括InnoDB system表空间和通用表空间。有关在共享表空间中识别分区并将它们移动到每个表文件的表空间的信息,请参见2.11.5节“为升级准备安装”。

在MySQL 8.0.13中不支持在SET语句中设置用户变量。这个功能在MySQL 9.0中可能会被删除。

删除了——ndb perror选项。请改用ndb_perror实用程序。

删除了innodb_undo_logs变量。innodb_rollback_segments变量执行相同的功能,应该使用它。

删除了Innodb_available_undo_logs状态变量。每个表空间可用回滚段的数量可以使用SHOW变量来检索,例如'innodb_rollback_segments';

从MySQL 8.0.14开始,之前弃用的innodb_undo_tablespaces变量不再是可配置的。更多信息,请参见15.6.3.4节“撤消表空间”。

支持ALTER TABLE…升级分区语句已被删除。

从MySQL 8.0.16开始,对internal_tmp_disk_storage_engine系统变量的支持已经被移除;磁盘上的内部临时表现在总是使用InnoDB存储引擎。有关磁盘上内部临时表的详细信息,请参阅存储引擎。

DISABLE_SHARED CMake选项未使用,已被删除。

使用chatGPT寻求答案
标签: 暂无标签

免责声明:

本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:master@freevpsweb.com

同类推荐
评论列表