Назад | Перейти на главную страницу

Могу ли я преобразовать свою базу данных / скрипт в UTF-8?

Как я могу преобразовать базу данных для поддержки UTF-8 и преобразовать старые данные из той кодировки, в которой они когда-либо были, в UTF-8?

Дополнительная информация: у меня есть сервер, на котором много веб-сайтов, и на одном из них работает WHMCS (скрипт php для управления клиентами хостинга). WHMCS имеет приложение для iPhone, где я могу просматривать его через iPhone, проблема в том, что это приложение будет работать, только если все на моем веб-сайте находится в кодировке UTF-8.

Я использовал windows-1256 в качестве кодировки в настройках моего скрипта, и я попытался изменить это в какой-то момент на UTF-8 на некоторое время, а затем снова изменил его на windows-1256

Итак, данные в базе данных вставлены с использованием стандартов UTF, и большинство из них - windows-1256

Если бы кто-то мог прояснить для меня картину, нужно ли мне преобразовывать каждую базу данных на сервере или только одну БД? что я должен изменить?

Если бы мне пришлось делать это вручную, я бы сделал это, но мне нужен совет специалиста.

Кодировка базы данных обычно определяется при создании базы данных (особенно для Postgres). Один из способов исправить это - экспортировать, создать новую БД и затем повторно импортировать. Этой ссылки может хватить.

Однако кодировка приложения может отличаться от кодировки базы данных. Это означает, что приложение отправляет UTF-8 и при чтении БД преобразует кодировку БД в UTF-8. Обычно это делается при подключении к базе данных (см. эту функцию PHP).

Поэтому, если у вас есть доступ к исходному коду (должно быть), найдите, где приложение выполняет соединение, и установите кодировку для вашей базы кода БД. Затем найдите, где приложение или Apache установили кодировку вывода, и установите для нее значение UTF-8. Это должно помочь.

Создайте файл базы данных и преобразуйте его в UTF-8 с помощью следующей команды:

iconv -f WINDOWS-1251 -t UTF-8 $ yourfilename.icv> $ file

поскольку WHMCS является коммерческим приложением, вам следует обратиться к поставщику за поддержкой о том, как преобразовать содержимое БД из существующей кодировки в UTF-8, особенно потому, что не все приложения хорошо работают с данными UTF-8 (часто это влияет на сортировку / сопоставление и поиск) . MySQL и CentOS могут потребовать некоторой настройки, в то время как PHP, вероятно, не будет, поскольку он напрямую не поддерживает UTF-8, хотя приложения PHP могут использовать UTF-8.

Преобразование существующего приложения в UTF-8 - нетривиальное занятие, хотя оно должно быть возможным при некоторой поддержке.

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