2015-06-09 6 views
2

У меня проблема с использованием функции REPLACE() для определенных данных. Он не соответствует появлению строки, который он должен заменить.Строковая цитата MySQL для REPLACE()

Строка, которую я хочу заменить, следующая.

S: 54: "Учение \ Common \ Коллекции \ ArrayCollection_elements

Он хранится в следующем поле

`definitions` longtext COLLATE utf8_unicode_ci NOT NULL COMMENT '(DC2Type:object)', 

Вот т.п. запрос, который соответствует всем строкам, содержащим строка (уведомление \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: Пожалуйста, не обвиняйте меня в том, что я пытаюсь заменить. это не моя вина :-)

+0

'ArrayCollection_elements' =' ArrayCollection \ 0_elements' это не ясно, также есть некоторые двусмысленность с '\' –

+0

Когда я отправляю строку в виде текста, \ 0 явно не отображается, но он есть. Я использовал такое же количество косых черт, как в LIKE – Stepashka

+0

Можете ли вы поделиться частью табличных данных, чтобы я мог воссоздать ситуацию? –

ответ

0

Если ваш «где состояние» работает, вы можете попробовать:

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%'; 
Смежные вопросы