Преобразование данных латинского mysql в utf8 - PullRequest
2 голосов
/ 07 июня 2010

Я хочу использовать utf 8 прямо сейчас, но все мои данные латинские1, что является эффективным способом для преобразования данных. Также я знаю, как изменить структуру базы данных (charset) на utf8. Что я хочу сделать, это изменить charset существующих данных.

обновление

Вот мои старые настройки,

  1. Вывод HTML: utf8
  2. Ввод HTML: utf8
  3. Php - mysql соединение: latin1
  4. mysql (поля и таблицы): latin1

Вот мои новые настройки, и я надеюсь, что это лучший способ создать многоязычный веб-сайт

  1. Вывод HTML: utf8
  2. Ввод HTML: utf8
  3. Php - mysql соединение: utf8
  4. sql (поля и таблицы): utf8

Ответы [ 6 ]

6 голосов
/ 19 августа 2010

Если вы примените utf8_encode () к уже строке UTF8, она вернет искаженный вывод UTF8.

Я сделал функцию, которая решает все эти проблемы. Он называется forceUTF8 ().

Вам не нужно знать, какова кодировка ваших строк. Это может быть Latin1 (iso 8859-1) или UTF8, или строка может иметь сочетание двух. forceUTF8 () преобразует все в UTF8.

Я сделал это, потому что служба давала мне все данные, перепутанные, смешивая UTF8 и Latin1 в одной строке.

Использование:

$utf8_string = forceUTF8($utf8_or_latin1_or_mixed_string);

$latin1_string = forceLatin1($utf8_or_latin1_or_mixed_string);

Я включил еще одну функцию fixUFT8 (), которая будет исправлять каждую строку UTF8, которая выглядит искаженной.

Использование:

$utf8_string = fixUTF8($garbled_utf8_string);

Примеры:

echo fixUTF8("Fédération Camerounaise de Football");

echo fixUTF8("Fédération Camerounaise de Football");

echo fixUTF8("FÃÂédÃÂération Camerounaise de Football");

echo fixUTF8("Fédération Camerounaise de Football");

выведет:

Fédération Camerounaise de Football

Fédération Camerounaise de Football

Fédération Camerounaise de Football

Fédération Camerounaise de Football

Обновление: я преобразовал их в статический класс, и теперь они живут в Github:

https://github.com/neitanod/forceutf8

1 голос
/ 19 июня 2010
1 голос
/ 19 июня 2010

Лучшее решение для создания новой базы данных с именем имя_базы _Новый дамп SQL из вашей старой базы данных.

Затем возьмите этот дамп и замените информацию о кодировке новыми данными utf8 и убедитесь, что сам файл sql восстановлен как utf8.

Затем загрузите это обратно в новую базу данных, проверьте, что все работает нормально, и затем переименуйте его.

Это может быть длительным процессом в сети, поэтому я рекомендую вам сделать это через сессию ssh и использовать все преимущества bash pipe и т. П.

1 голос
/ 07 июня 2010

Вы действительно используете часть latin1, или ваши данные на самом деле ASCII?

Казалось бы, для этого есть команда:

... но будьте осторожны, я также нашел это:

Если команда такого типа не работает, альтернативой может быть выгрузка таблицы (таблиц) в файл, ее преобразование и повторный импорт. (Или, если вы можете убедить его сбросить в UTF-8, даже лучше ...)

Кажется, для этого есть много информации: http://www.google.com/search?q=mysql+convert+table+to+utf8

1 голос
/ 07 июня 2010

Вам нужно изменить параметры сортировки (на utf-8). Вот сценарий, чтобы сделать это легко. http://blog.vision4web.net/2008/11/change-collation-on-all-tables-and-columns-in-mysql/ У меня есть опыт работы с этим скриптом, он отлично работает

0 голосов
/ 07 июня 2010

Если вы можете / хотите жить с данными, хранящимися как latin1, но просто хотите представить их как UTF-8, указание UTF-8 в качестве набора символов соединения также должно работать Один из способов проверить это - выполнить запрос

SET NAMES 'utf8'

после установления соединения, перед чтением / записью каких-либо данных.

Подробнее об этом здесь http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...