MySQL限制和限制MySQL中已知的问题

第14章MySQL中的已知问题

本节列出了最近版本的MySQL中的已知问题。

有关特定于平台的问题的信息,请参见中的安装和调试说明一般安装指导,调试MySQL

已知以下问题:

  • 子查询优化并不那么有效=

  • 即使你使用dreame_case_table_names = 2(它使MySQL能够记住用于数据库和表名的情况),MySQL不记得用于该函数的数据库名称的情况数据库()或者在各种日志中(在不区分大小写的系统中)。

  • 放弃一个外钥匙约束在复制中不起作用,因为约束在副本上可能有另一个名称。

  • 代替(和加载数据代替选项)不会触发在删除级联

  • 清楚的订购不能在里面工作group_concat()如果不使用所有列,而只使用清楚的列表。

  • 插入大整数值时(2之间63.和264.-1)进入十进制或字符串列,它被插入为负值,因为在符号整数上下文中评估了数字。

  • 使用基于语句的二进制日志记录,源服务器将执行的查询写入二进制日志。这是一种非常快速、紧凑和高效的日志记录方法,在大多数情况下都能完美地工作。但是,如果查询的设计方式是不确定的(通常不推荐这样做,即使在复制之外),则源和副本上的数据可能会不同。

    例如:

    当且仅当上述查询没有订购保证确定性秩序的条款

    例如,插入...选择没有订购, 这选择可能以不同的顺序返回行(这导致具有不同等级的行,因此在此中获得不同的数字AUTO_INCREMENT列),取决于优化器在源和副本上的选择。

    只有在源和副本上的不同之处,查询在源和副本上进行了优化

    • 源上使用与副本上不同的存储引擎存储表。(可以在源和副本上使用不同的存储引擎。例如,您可以使用Innodb.在来源,但myisam.如果副本的可用磁盘空间较少,则在副本上。)

    • MySQL缓冲区大小(key_buffer_size.等等)在源和副本上不同。

    • 源和副本运行不同的MySQL版本,优化器代码在这些版本之间不同。

    此问题也可能影响数据库恢复使用mysqlbinlog | mysql

    避免这个问题最简单的方法是添加一个订购子句,以确保始终以相同的顺序存储或修改行。使用基于行的或混合的日志记录格式也可以避免这个问题。

  • 如果您未使用启动选项指定文件名,则日志文件名基于服务器主机名。要保留相同的日志文件名,如果将主机名更改为其他内容,则必须明确使用诸如此类选项- -log-bin =old_host_name。看服务器命令选项。或者,重新命名旧文件以反映您的主机名更改。如果这些是二进制日志,则必须编辑二进制日志索引文件并修复其中的二进制日志文件名。(对于副本上的中继日志也是如此。)

  • mysqlbinlog.不删除临时文件后留下的加载数据陈述。看处理二进制日志文件的实用程序

  • 改名不起作用暂时的在a中使用的表格或表格合并表格

  • 使用时设置字符集,您不能在数据库,表和列名中使用翻译字符。

  • 在MySQL 8.0.17之前,您无法使用_逃脱喜欢......逃避

  • 服务器只使用第一个max_sort_length.比较数据值时的字节。这意味着值不能可靠地使用集团订购, 或者清楚的如果它们只在第一个之后不同max_sort_length.字节。为了解决这个问题,增加变量值。的默认值max_sort_length.是1024,可以在服务器启动时或运行时更改。

  • 数值计算用big(两者通常是64位长)。您获得的精确度取决于功能。一般规则是执行位函数big精确,如果()英语教学()big精度,其余部分精确。如果它们决定大于63位(922337203685475807),则应尝试使用无符号长的长值(922337203685475807)。

  • 你最多可以有255岁枚举列在一个表中。

  • MIN()最大限度(),和其他聚合函数,MySQL目前比较枚举列由其字符串值而不是字符串在集合中的相对位置。

  • 在A.更新声明,列从左到右更新。如果您引用更新的列,则会获得更新的值而不是原始值。例如,以下语句增量钥匙经过2不是1

    mysql>更新tbl_name设置键=键+ 1,键=键+ 1;
  • 您可以在同一查询中引用多个临时表,但您不能超过一次给定的临时表。例如,以下不起作用:

    mysql>从temp_table,temp_table选择*作为t2;错误1137:无法重新打开表:'temp_table'
  • 优化器可以处理清楚的不同的是,当你使用一个加入列的列比你不是。在连接中,隐藏的列被计算为结果的一部分(即使它们未显示),而在正常查询中,隐藏列不会参与其中清楚的比较。

    这一例子是:

    从BAND_DOWNLOADS中选择不同的MP3ID,其中use10bet手机中文版rid = 9按ID DESC订购;

    从band_downloads,band_10bet手机中文版mp3中选择distinct band_downloads.mp3id。bydr_downloads.userid = 9和band_mp3.id = band_downloads.mp3 and顺序由band_downloads.id desc命令;

    在第二种情况下,您可以在结果集中获得两个相同的行(因为隐藏中的值ID柱可能不同)。

    注意,这只会发生在没有订购结果中的列。

  • 如果你执行一个程序在返回空集的查询上,在某些情况下程序不转换列。

  • 创建类型表合并不检查底层表是否兼容类型。

  • 如果你使用改变表添加一个独特索引到一个表中使用的表合并表然后添加正常索引合并表,键顺序是不同的表,如果有一个旧的,非独特键入表格。这是因为改变表独特索引在普通索引之前,以便能够尽早检测重复的键。