gpt4 book ai didi

mysql - 需要使用临时变量来使 SUBSTRING_INDEX 的 REPLACE 工作

转载 作者:行者123 更新时间:2023-11-29 01:52:50 25 4
gpt4 key购买 nike

我们在许多 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 上找不到任何东西。

最佳答案

这似乎是 MySQL 5.6.5 中修复的错误。关于 LOWER(SUBSTRING_INDEX(...)) 有一些类似的错误报告.它以评论结束:

Noted in 5.6.5 changelog.

The result of SUBSTRING_INDEX() could be missing characters when usedas an argument to conversion functions such as LOWER().

我怀疑根本原因是指​​针误用导致缓冲区溢出和未定义行为。希望我没有损坏服务器中的任何长期内存。

关于mysql - 需要使用临时变量来使 SUBSTRING_INDEX 的 REPLACE 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36727528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com