2013-08-04 2 views
2

У меня есть приложение, которое работает на PHP 5 и обращается и хранит базу данных MySQL, используя расширение mysqli. База данных содержит множество таблиц с кодировкой UTF-8 (сортировка utf8_swedish_ci).MySQL конвертировать charset вопрос

К сожалению, кажется, что MySQLi соединение было сконфигурировано для кодирования все с помощью ISO-8859-1, а это значит, что у меня есть UTF-8 таблица, содержащая latin1 данные. Я пытаюсь восстановить это сейчас, переместив все на UTF-8 (как и должно быть!)

Есть ли встроенный способ обращения с этим? Если этого не произойдет, как бы вы порекомендовали мне подойти к этой проблеме?


Edit: Образец что выглядит данные, как при просмотре через все это с помощью PHPMyAdmin:

handelë (должно быть handelë)

√skal (должен быть √skal)

Кроме того, данные выводятся правильно в документе HTML, если я использую выходную кодировку UTF-8, но сохраняю sqli соединение charset как latin1. Все это довольно запутанно.

Очень благодарен вам за помощь!

+0

try 'utf8_general_ci' –

+0

Как бы преобразовать данные без развращения всего? – Leonard

+0

Если это все испортило, вы можете сделать «REPAIR» на таблицах. (Я не много работал с кодировками, но я просто даю свои 2 цента). – 1234567

ответ

5

Хорошо! Итак, вот что должно было произойти:

пользовательский интерфейс (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.

Благодарим вас за то, что вы изучили мою проблему, ребята! :)