Недавно я перешел на другую платформу для своего личного веб-сайта и столкнулся с проблемой, когда прежняя кодировка символов, такая как "
, ""
и '
, теперь странным образом перекодируется как :
“
”
’
’
'
Я видел это раньше, и в прошлый раз я просмотрел вручную и обновил каждую статью. На этот раз, однако, я бы хотел использовать более прагматичный подход, обновляя базу данных.
Как мне заменить все вхождения этих строк их правильными символами?
Я думаю, что это будет что-то вроде:
SELECT REPLACE(''',''')
Но нужно ли быть осторожным и включать экранирующие символы, такие как \
? Кроме того, как я могу выполнить этот тип замены для всей базы данных?
Примечание: я буду использовать phpMyAdmin для выполнения этих замен, поэтому я надеюсь, что это всего лишь вопрос ввода серии команд на вкладке «SQL». Хотя у меня есть доступ к серверу MySQL из командной строки, если это необходимо.
Обновление:
Подробнее о структуре:
- Имя таблицы: "field_data_comment_body"
- Имя поля: "comment_body_value"
- Поле, о котором идет речь, имеет тип "longtext"
Я попытался выполнить рекомендацию Йохана, но он возвращает 0 Затронутых строк:
DELIMITER $$
CREATE FUNCTION FixEncoding(input longtext) RETURNS longtext
BEGIN
DECLARE output longtext;
SET output = input;
SET output = REPLACE(output,''','\'');
SET output = REPLACE(output,'’','\'');
SET output = REPLACE(output,'” ','"');
SET output = REPLACE(output,'“','"');
SET output = REPLACE(output,'’','\'');
RETURN output;
END $$
DELIMITER ;
UPDATE field_data_comment_body SET comment_body_value = FixEncoding(comment_body_value) WHERE entity_id <> 0;
Обновление: это не ошибка перевода, так как возвращает 63 строки:
SELECT `comment_body_value`
FROM `field_data_comment_body`
WHERE `comment_body_value` LIKE '%&#039;%'
LIMIT 0 , 30