Как конфертировать из windows-1257 в utf-8 (mysql) - PullRequest
1 голос
/ 03 ноября 2011

Мне нужна помощь с проблемой кодирования, с которой я боролся уже пару дней.

У меня есть база данных с сопоставлением "latin1_swedish_ci".Когда я просматриваю одну запись, она показывает испорченный текст

grieþos informçs

это должно быть

griežos informēs

Хорошо, так что ... Я попытался вывести текст в браузер с помощью php-скрипта и установить

<meta http-equiv="Content-Type" content="text/html; charset=windows-1257" />

Теперь ... он показывает данные правильно ("griežos informēs").Что мне нужно сделать, это преобразовать эти данные в UTF-8, чтобы я мог использовать

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

и отображать все правильно.

Я попытался использовать Notepad2 и создать файл с окнами кодирования-1257 затем скопируйте текст из базы данных и сохраните его .... та же проблема.

Пытался даже создать таблицу в этой базе данных с сопоставлением utf-8 и вставить туда данные ... не повезло - просто показывает?где должны быть специальные символы.

Любая помощь будет оценена,

Спасибо

Ответы [ 2 ]

1 голос
/ 03 ноября 2011
SELECT CAST(_cp1257_general_ci'test' AS CHAR CHARACTER SET utf8);

(тест - это имя столбца)

Это даст вам строку в правильном наборе символов. Вы должны создать новую таблицу, используя UTF8, тогда SELECT CAST(....) FROM old_table INTO new_table

Вы также можете изменить набор символов старой таблицы на cp1257_general_ci вместо latin1_swedish_ci.

Чтобы сделать это без потери данных, сначала измените тип данных столбца на blob, затем измените его во второй раз на varchar с cp1257_general_ci, а затем в третий раз на utf8_unicode_ci (сначала я предлагаю сделать резервную копию, просто в случае.)

0 голосов
/ 03 ноября 2011

Используйте этот запрос сразу после открытия соединения с базой данных, чтобы он запускался один раз при каждой загрузке страницы:

    mysql_query('SET NAMES `utf8`');
...