У меня есть приложение, которое работает на PHP 5 и обращается и хранит базу данных MySQL, используя расширение mysqli . База данных содержит множество таблиц с кодировкой UTF-8 (сортировка utf8_swedish_ci ).
К сожалению, похоже, что соединение mysqli было настроено на кодирование всего, используя ISO-8859-1, что означает, что у меня есть таблицы UTF-8, содержащие данные latin1 . Я пытаюсь восстановить это сейчас, переместив все на UTF-8 (как и должно быть!)
Есть ли встроенный способ обработки этого? Если этого не произойдет, как бы вы порекомендовали мне подойти к этой проблеме?
Изменить: пример того, как выглядят данные при просмотре всего с помощью PHPMyAdmin:
handelë
(должно быть handelë
)
√skal
(должен быть √skal
)
Кроме того, данные выводятся корректно в документе HTML, если я использую выходную кодировку UTF-8, но поддерживаю кодировку соединений mysqli как latin1. Все это довольно запутанно.
Очень благодарен за вашу помощь!
Отлично! Так вот что должно было случиться:
пользовательский интерфейс (UTF-8) → контроллер (UTF-8) → модель (ISO-8859-1) → база данных (UTF-8, но она принимает ISO-8859-1)
Поэтому поля были настроены на использование кодировки UTF-8, но они получают ISO-8859-1 кодированные данные. Я хотел преобразовать неправильно кодированные данные в UTF-8.
Поскольку данные были фактически кодированы ISO-8559-1, я решил свою проблему со следующим небольшим «взломом» MySQL:
UPDATE `table` SET `column` = convert(cast(convert(`column` using latin1) as binary) using utf8)
Предоставлено ABS на StackOverflow.
Спасибо, что посмотрели мою проблему, ребята! 🙂