вставка текста в кодировке latin1 в таблицы utf8 (забыл использовать mysql_set_charset)

У меня есть веб-приложение PHP с таблицами MySQL, принимающими текст utf8. Недавно я преобразовал данные из latin1 в utf8 вместе с таблицами и столбцами соответственно. Однако я забыл использовать mysql_set_charset, и последние входящие данные, как я полагаю, поступали через соединение MySQL как latin1. Я не знаю, что происходит, когда latin1 входит в столбец utf8, но это вызывает некоторые странные проблемы с отображением таких элементов, как запятая, кавычки, амперсанд и т. д.

Теперь, когда mysql_set_charset на месте, он извлекает данные причудливыми символами. Любой способ преобразовать суп latin1-utf8 в прямой utf8 теперь, когда у меня есть ресурс подключения к базе данных с использованием правильной кодировки?


person scootklein    schedule 04.07.2010    source источник
comment
Слишком ленив, чтобы тестировать и продавать его как мой ответ. nofollow noreferrer">mysqlperformanceblog.com/2007/12/18/ должен помочь вам (там тоже есть хорошие комментарии). Если возможно просто вставить/обновить строки в течение периода, когда set_charset() отсутствовал, вы даже можете преобразовать эти строки практически ничего не проверяя.   -  person Kuchen    schedule 05.07.2010


Ответы (1)


Нашел исправление с вашим комментарием. Вот строка SQL, которая, похоже, решила мою проблему.

UPDATE table SET col = CONVERT(CONVERT(CONVERT(col USING latin1) USING binary) using utf8);

Несмотря на то, что столбец имеет формат UTF8, он заставляет его извлекать данные как latin1, преобразовывать в двоичные файлы, преобразовывать в utf8 и повторно вставлять.

person scootklein    schedule 05.07.2010
comment
скопировать таблицу перед использованием, как знать - person khaled_webdev; 12.11.2012