本节列出了最新版本的MySQL的已知问题。
特定于平台的问题的信息,请参阅安装和调试指令2.1节,“一般安装指导”,MySQL 5.8节,“调试”。
以下问题:
子查询优化
在
不那么有效吗=
。即使您使用的
lower_case_table_names = 2
(这使得MySQL记住用于数据库和表名),MySQL不记得用于函数的数据库名称数据库()
或者在不同的日志(在不区分大小写的系统)。放弃一个
外键
约束不复制工作,因为约束可能在复制另一个名字。截然不同的
与命令
不工作GROUP_CONCAT ()
如果不使用,只有那些在列截然不同的
列表。当插入一个整数值(2之间63年和264年−1)成一个十进制或字符串列,这是插入一个负值,因为评估数量带符号整数上下文。
与statement-based二进制日志,源服务器将执行查询写入二进制日志。这是一个非常快速、紧凑、高效的日志记录方法在大多数情况下,是完美的。然而,它是可能的来源上的数据和副本成为不同如果查询设计以这样一种方式,数据修改是不确定的(一般不推荐的做法,甚至外面的复制)。
例如:
当且仅当没有前面的查询
命令
条款保证确定的秩序。例如,对于
插入……选择
没有命令
,选择
可能以不同的顺序返回行(导致一行有不同的等级,因此不同数量的吗AUTO_INCREMENT
列),这取决于选择由优化器在源和复制品。查询优化不同的源和副本只有:
使用不同的存储引擎表存储在源而不是复制品。(可以使用不同的存储引擎在源和复制品。例如,您可以使用
InnoDB
源,但是MyISAM
副本如果副本可用磁盘空间更少。)MySQL缓冲区大小(
key_buffer_size
等等)不同来源和副本。源和副本运行不同的MySQL版本,这些版本之间的优化器代码不同。
这个问题也会影响数据库恢复使用mysqlbinlog | mysql。
避免这个问题的最简单的方法是添加一个
命令
条款对上述不确定性查询以确保行总是或修改存储在相同的顺序。使用基于行的或混合日志格式还可以避免这个问题。日志文件的名字是基于服务器的主机名称如果不指定一个文件名的启动选项。保留相同的日志文件的名称,如果你改变你的主机名称,您必须显式地使用选项等
——log-bin =
。看到5.1.6部分,“服务器命令选项”。另外,重命名旧文件,以反映您的主机名称的改变。如果这些二进制日志,您必须编辑二进制日志索引文件和解决二进制日志文件的名称。(同样适用于继电器日志副本。)old_host_name
本mysqlbinlog不会删除临时文件后离开吗
加载数据
声明。看到4.6.7部分,“mysqlbinlog -实用程序来处理二进制日志文件”。重命名
不工作临时
表或表中使用合并
表。当使用
设置字符集
中,您不能使用翻译人物数据库、表和列的名称。你不能使用
_
或%
与逃避
在喜欢……逃避
。服务器只使用第一
max_sort_length
字节当比较数据值。这意味着价值不能可靠地使用集团
,命令
,或截然不同的
如果他们只有在第一个不同max_sort_length
字节。为了解决这一问题,增加了变量值。的默认值max_sort_length
是1024,可以在服务器启动时间或在运行时改变。数值计算完成
长整型数字
或双
(通常是64位长)。的精度依赖于函数。一般的规则是,一些功能执行长整型数字
精度,如果()
和英语教学()
与长整型数字
或双
精密,剩下的双
精度。你应该尽量避免使用无符号长如果他们解决长值大于63位(9223372036854775807)以外的任何领域。在一个
更新
语句,从左到右列更新。如果你指的是一个更新的列,得到更新后的值,而不是原始值。例如,以下语句的增量关键
通过2
,不1
:mysql >更新tbl_name设置键=键+ 1,键=键+ 1;
您可以引用多个临时表在同一个查询,但是你不能把任何给定的临时表不止一次。例如,下面的不工作:
从temp_table mysql > SELECT *, temp_table t2;错误1137:无法打开表:“temp_table”
优化器可能会处理
截然不同的
当您使用的是不同的”隐藏的”列一个比当你不加入。加入,隐藏的列数的结果(即使他们不是如图所示),而在正常查询,隐藏列不参与截然不同的
比较。这方面的一个例子:
选择不同的mp3id从band_downloads userid10bet手机中文版 = 9订单的id DESC;
和
选择不同的band_downloads。10bet手机中文版从band_downloads 10bet手机中文版mp3id band_mp3 band_downloads的地方。用户id = 9和band_mp3。id = band_10bet手机中文版downloads。由band_downloads mp3i10bet手机中文版d秩序。id DESC;
在第二种情况下,你可能会得到两个相同的行结果集(因为隐藏中的值
id
列可能有所不同)。请注意,这仅供查询,没有发生
命令
列的结果。如果你执行
过程
在一个查询,返回一个空集,在某些情况下过程
并不能把列。创建一个表的类型
合并
不检查底层表是否兼容的类型。如果你使用
ALTER TABLE
添加一个独特的
索引表中使用合并
表,然后添加一个正常指数合并
表,表的关键顺序是不同的如果有一个古老的,非独特的
钥匙在桌子上。这是因为ALTER TABLE
把独特的
索引之前正常索引能够尽早发现复制钥匙。