 | |  | |
Проблема с кодировкой при выводе данных из БД. Что делать?
В базе данных MySQL с версии 4.1.х и новых версиях phpMyAdmin (с 2.6.0) внедрена расширенная поддержка юникод кодировок (UTF-8) и расширенные возможности для установки кодировок (к примеру теперь можно установить кодировку на каждую таблицу в отдельности). К сожалению на национальных (в том числе кириллических) кодировках некоторые из нововведений с расширенными возможностями кодировок могут вызвать некоторые проблемы. Данные внутри сервера БД теперь хранятся в кодировке utf-8, что позволяет пользователю оперировать данными в его БД так, как ему необходимо. Принципиально это большой плюс, но однако многие веб-разработчики уже столкнулись с проблемой смешения кодировок, когда на сайтах вместо русских букв выводятся (???) либо текст выводится не в той кодировке, которой нужно. И дело тут не в сервере БД, а в адаптированности к этому самих скриптов, многие из которых пока не умеют корректно работать с теми расширенными возможностями, предоставляемыми новыми версиями БД MySQL.
Исправить положение для кириллицы может прописывание в файле коннекта скрипта к базе данных ДО всех запросов SQL-команды SET NAMES 'cp1251' (тем самым данные при запросе или при записи будут преобразованы в эту кодировку). Ниже мы приводим более избыточный алгоритм для решения подобных проблем (при наличии у вас копии БД) на примере для кодировки win-1251:
1) Убедитесь, что дамп для восстановления или создания базы сделан в одной, нужной кодировке, например, win cp-1251. Проверьте чтобы в дампе НЕ БЫЛО значений в разных кодировках.
2) Сотрите всю базу данных (drop) на сервере
3) На стартовой странице phpMyAdmin выберите кодировку сравнения cp-1251 (сp-1251_general_ci), язык интерфейса English.
4) Создайте базу либо закачайте структурный дамп БЕЗ данных и установите для таблиц кодировку сравнения сp-1251_general_ci.
5) Теперь залейте дамп с данными, НЕ забыв указать кодировку дампа (в phpMyAdmin в выпадающем списке кодировок возле окна с именем загружаемового дамп-файла)
6) После заливки данных проверьте кодировку сравне
В коннекте к базе пропишите следующую SQL-команду:
SET NAMES 'cp1251'
Пример:
$conn = mysql_connect($this->host, $this->user, $this->password);
mysql_select_db($this->dbname, $db);
mysql_query("SET NAMES 'cp1251'");
$result = mysql_query($sql);
return $result;
mysql_close($conn);
При выгрузке данных из MySQL 4.1.x через phpmyadmin кириллические символы отображаются в виде (ГЂГäðååâГГ) - это не является проблемой, так как выгруженные данные находятся в кодировке utf-8 (в этой кодировке они хранятся в базе). Преобразовать такой дамп например в win-1251 достаточно просто - для этого можно использовать любой текстовый редактор, обеспечивающем корректную работу с кодировкой utf-8 (например GridinSoft Notepad или UltraEdit). Да, это несколько усложняет работу с данными в национальных кодировках, однако к этому придётся привыкнуть и переписать свои скрипты так, что была совместимость с новыми версиями БД MySQL, так как дальнейшее развитие БД MySQL будет идти именно по такому пути, и возврата назад нет.
|
| |  | |  |
Предоставление услуг на основание лицензий № 57337, № 57338, № 57339, № 57340 от 28.03.2008 г. выданных Федеральной службой по надзору в сфере массовых коммуникаций, связи и охраны культурного наследия.
|
Аренда Офисов у Метро (Москва): аренда помещений. | имплантация зубов в москве, отбеливающие полоски.
|