【发布时间】:2015-08-24 04:03:45
【问题描述】:
我在对特定数据使用 REPLACE() 函数时遇到问题。它与应该替换的字符串匹配不匹配。
我要替换的字符串如下。
s:54:"Doctrine\Common\Collections\ArrayCollection_elements
它存储在以下字段中
`definitions` longtext COLLATE utf8_unicode_ci NOT NULL COMMENT '(DC2Type:object)',
这是匹配所有包含字符串的行的 LIKE 请求(注意字符串上的\0):
SELECT `definitions`
FROM `entity_type`
WHERE `definitions` LIKE '%s:54:"\0Doctrine\\\\Common\\\\Collections\\\\ArrayCollection\0_elements%'
同时,当我运行以下请求时,我收到“0 行受影响”消息并且没有任何内容被替换:
UPDATE `entity_type`
SET `definitions` = REPLACE(
`definitions`,
's:54:"\0Doctrine\\\\Common\\\\Collections\\\\ArrayCollection\0_elements',
's:53:"\0Doctrine\\\\Common\\\\Collections\\\\ArrayCollection\0elements'
);
我应该如何修改字符串以使 REPLACE() 匹配我需要的文本并替换它?
PS:请不要因为我试图替换的东西而责备我。这不是我的错:-)
【问题讨论】:
-
ArrayCollection_elements!=ArrayCollection\0_elements这个不清楚,\也有歧义 -
当我将字符串作为文本发布时,\0 显然没有显示,但它就在那里。我使用了与 LIKE 中相同数量的斜线
-
能否请您分享部分表格数据,以便我重新创建情况?
-
我用 SQL 中的一张表正常尝试过它工作正常,表中的数据可能存在一些缺陷。
-
@Stepashka:当源字符串和目标字符串只有 一个 char 差异时,为什么不能直接替换那个 char?