【问题标题】:MySQL string quotation for REPLACE()REPLACE() 的 MySQL 字符串引用
【发布时间】: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?

标签: mysql sql string replace


【解决方案1】:

如果您的“where 条件”有效,您可以尝试:

UPDATE `entity_type`
    SET `definitions` = REPLACE(REPLACE(
        `definitions`, 
        's:54:', 
        's:53:'),'ArrayCollection_elements','ArrayCollectionelements')
where `definitions` LIKE '%s:54:"\0Doctrine\\\\Common\\\\Collections\\\\ArrayCollection\0_elements%';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 2012-04-06
    • 1970-01-01
    • 2011-02-26
    • 2014-11-06
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多