mysql regexp\u用update替换

yhqotfr8  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(423)

我刚刚将mysql升级到8.0.11,以便能够使用regexp\u替换。它在select语句中运行良好,但当我在更新中使用它时,会得到奇怪的结果。下面是一个简化的示例:如果我有一个字段为“567890”,并且我用以下内容更新它:

update test set field = regexp_replace(field, '[7]', 'z')

字段值设置为“56”,而不是“56z890”。
这一定是一个bug,但在此期间,是否有任何解决方法使其按预期工作?谢谢。

eimct9ow

eimct9ow1#

我使用的是apacheversion(php)5.6和mysql version 10.1.25-mariadb localhost服务器。
我尝试了以下查询,

UPDATE `table_name` 
SET         
    column_name = REGEXP_REPLACE(column_name,regex_pattern_to_find,replaceable_text)
WHERE
    column_name RLIKE 'regex_pattern_to_find'

对我来说效果不错。希望这有帮助。

kwvwclae

kwvwclae2#

它看起来像是regexp\u replace函数的一个bug。在mariadb中,它按预期工作,请参见dbfiddle。
我将尝试在bugs.mysql.com中报告错误。已报告错误,错误#90803 regexpŦu替换累积结果,错误Ŧ90870 regexpŦu替换截断更新。
解决方法是:

UPDATE `test`
SET `field` = CAST(REGEXP_REPLACE(`field`, '[7]', 'z') AS CHAR);

见小提琴。

相关问题