在LONGTEXT MySQL中替换字符串

时间:2018-03-05 22:08:04

标签: mysql sql

我正在尝试更新新数据库中的某些图像。我已阅读过使用此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中的内容吗?

示例数据:

blogs

中的body条目中
<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>

1 个答案:

答案 0 :(得分:0)

您可能正在达到事务日志的高水位标记 - 即所有前后值的数据总量超过单个事务允许的最大值,特别是因为数据类型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,或者为了方便起见,可能需要调高。

您可能不需要WHERE子句,但我没有方便的MySQL实例来测试它。