替换LONGTEXT MySQL中的字符串

rqdpfwrv  于 2023-02-18  发布在  Mysql
关注(0)|答案(2)|浏览(239)

我正在尝试更新一个新数据库中的一些图像。我已经阅读了使用此SQL查询:

UPDATE blogs SET body = REPLACE(body, 'http://www.OLDSITE.com/wp-content/uploads/', 'https://NEWSITE.nyc3.digitaloceanspaces.com/old-wordpress/');

但那没有用。
我运行此查询只是为了确保它找到了我需要的内容

SELECT REPLACE(body, 'http://www.OLDSITE.com/wp-content/uploads/', 'https://NEWSITE.nyc3.digitaloceanspaces.com/old-wordpress/') from blogs

这就返回了我所需要的全部。我在UPDATE中错过了什么吗?
示例数据:
bodyblogs条目中

<a href="http://www.OLDSITE.com/wp-content/uploads/2014/09/beforeandaftercollage2.jpeg"><img class="alignnone size-medium wp-image-9089" alt="beforeandaftercollage2" src="http://www.OLDSITE.com/wp-content/uploads/2014/09/beforeandaftercollage2-231x300.jpeg" width="231" height="300" /></a>
jaql4c8m

jaql4c8m1#

您可能已经达到了事务日志的高水位线-即所有前后值的数据总量超过了单个事务所允许的最大值,特别是因为数据类型LONGTEXT意味着大量数据。
更新数据块。幸运的是,MySQL有一个非常方便的特性可以做到这一点:

UPDATE blogs SET
body = REPLACE(body, 'http://www.OLDSITE.com/wp-content/uploads/', 'https://NEWSITE.nyc3.digitaloceanspaces.com/old-wordpress/')
WHERE body like '%www.OLDSITE.com%'
LIMIT 1000

诀窍是LIMIT 1000,它在更新了1000行之后停止查询,如果更新仍然使日志大小过大,您可能需要调小1000的数值,或者为了方便起见,调大1000的数值。
您可能不需要WHERE子句,但是我手头没有MySQL示例来测试它。

csbfibhn

csbfibhn2#

这是一个老主题,但对于那些可能遇到这个问题的人来说,问题是在longtext mysql字段中,斜杠被一个反斜杠转义。
1.转义文本(url)中的斜线,或
1.不改变斜线,
例如,编写如下代码:

UPDATE blogs 
SET body = REPLACE(body,
    'http:\\/\\/www.OLDSITE.com\\/wp-content\\/uploads\\/',
    'https:\\/\\/NEWSITE.nyc3.digitaloceanspaces.com\\/old-wordpress\/');

相关问题