【发布时间】:2016-08-12 04:06:41
【问题描述】:
我们在多个 Debian 服务器上运行 MySQL 5.5.47。在其中一些上,我们看到了以下奇怪的行为:
mysql> set @TKEY:='ARDARD:fae590c4.ffa2.11e5.a318.0cc47a39aeb4-1460351116';
mysql> select replace(substring_index(substring_index(@TKEY,':',-1),'-',1), '.','-') as guid;
+--------------------------------------+
| guid |
+--------------------------------------+
| fae5a2.1--0cc47a 9ae47a 9aeb4a 9aeb4 |
+--------------------------------------+
这应该提取@TKEY 的中间部分(在: 和- 之间)并用连字符替换所有句点。空间从何而来?结果的其他部分似乎混乱了:9aeb4 已重复,a2.1 已向左移动。
如果我将 substring_index 分配给中间变量,则不会发生这种情况。
mysql> set @temp = substring_index(substring_index(@TKEY,':',-1),'-',1);
mysql> select replace(@temp, '.', '-') as guid;
+--------------------------------------+
| guid |
+--------------------------------------+
| fae590c4-ffa2-11e5-a318-0cc47a39aeb4 |
+--------------------------------------+
这只发生在我们的生产服务器上。我无法在我们的开发服务器或 sqlfiddle 上重现它。我比较了所有服务器变量,看起来它们应该影响字符串函数的行为没有任何差异(最初在字符集和排序规则变量方面存在一些差异,但我更改了开发服务器以匹配生产服务器,但仍然无法'不要复制错误。
在另一台运行 MySQL 5.5.41 的生产服务器上,我得到一个稍微不同的错误结果:
mysql> select replace(substring_index(substring_index(@TKEY,':',-1),'-',1), '.','-') as guid;
+--------------------------------------+
| guid |
+--------------------------------------+
| fae590c4-ffa2-11e5-a318-0cc47a 9aeb4 |
+--------------------------------------+
这是正确的,只是最后一个3 有一个空格。
谁能解释一下?它只是一个MySQL错误吗?我在 bugs.mysql.com 上找不到任何东西。
【问题讨论】:
-
sqlfiddle 5.5 也给出了奇怪的结果。也可以通过使用中间临时变量来解决...我认为你发现了一个主要错误
-
所以我想这可能是 5.6 中修复的错误。我搜索已关闭的错误时找不到它,但这看起来有点相似:bugs.mysql.com/bug.php?id=60166