Как заменить один символ в больших таблицах MySQL - PullRequest
4 голосов
/ 03 января 2012

У меня были некоторые проблемы с обновлением joomla с 1.0 до 1.5 (мне нужно пройти весь путь до 1.7;).

В любом случае, у моего клиента установлена ​​старая версия joomla 1.0, а сайт является ненадежным.Хорватский.Это означает, что мне приходится иметь дело с такими символами, как Č, č, Ć, ć, Đ, đ ... Старая база данных находится в сопоставлении latin1_swedish_ci, и я перенес ее с помощью скрипта миграции в новую базу данных joomla 1.5, которая находится в utf8_general_ci.

Это привело (как и ожидалось) к некоторой путанице символов, например: ć стало è, È -> Č и т. Д. ...

Преобразование базы данных 1.0 в сопоставление utf8 не являетсявариант, поскольку он обрезает остальную часть содержимого при первом появлении Č, ć, đ, đ и т. д.

Итак, что я делал, так это запрос:

update jos_content
    set introtext = replace(introtext, 'È', 'Č');

Для этого нужно получить таблицу содержимого joomla и во всех вступительных текстах заменить È на Č.

Я сделал это и для заголовков, но когда я пытаюсь сделать это с полным текстом, я получаю эту ошибку:

Error
SQL query:

UPDATE jos_content SET FULLTEXT = REPLACE( introtext,  'È',  'Č' ) ;


MySQL said: 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fulltext = replace(introtext, 'È', 'Č')' at line 2

ТАК, это какая-то проблема с памятью (поскольку это полный текст в конце концов) или я просто что-то делаю не так.Кроме того, если есть лучший способ заменить все эти символы, скажите, пожалуйста, это то, что я понял из «нечитаемой» документации MySQL.

1 Ответ

6 голосов
/ 03 января 2012

FULLTEXT является зарезервированным словом в mysql и должно быть экранировано обратными галочками (`), если имя вашего столбца имеет то же имя.

UPDATE jos_content SET `FULLTEXT` = REPLACE(introtext, 'È', 'Č');
...