Хотелось-бы узнать, кто как справляется в извесных скриптах, которые не предназначены к работе с MySQL 4.1 (UTF-8), с проблеммой вывода данных из таблиц? Меня интересут кодировка. Какие варианты есть вообще.
Предлагаю обсудить следующие скрипты: IPB 2.1.x, Vb 3.6.0, SMF (all version), PHP-Nuke, SLAED, RusCMS и т.д
В базе данных 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).
4) Создайте базу либо закачайте структурный дамп БЕЗ данных и установите для таблиц кодировку сравнения сp-1251_general_ci.
5) Теперь залейте дамп с данными, НЕ забыв указать кодировку дампа (в phpMyAdmin в выпадающем списке кодировок возле окна с именем загружаемового дамп-файла)
6) После заливки данных проверьте кодировку сравнения у всех созданных таблиц. Проверьте что-бы в базе данных не было записей в посторонних кодировках!
В коннекте к базе пропишите следующую SQL-команду:
При выгрузке данных из MySQL 4.1.x через phpmyadmin кириллические символы отображаются в виде (ГЂГäðååâГГ) - это не является проблемой, так как выгруженные данные находятся в кодировке utf-8 (в этой кодировке они хранятся в базе). Преобразовать такой дамп например в win-1251 достаточно просто - для этого можно использовать любой текстовый редактор, обеспечивающем корректную работу с кодировкой utf-8 (например GridinSoft Notepad или UltraEdit). Да, это несколько усложняет работу с данными в национальных кодировках, однако к этому придётся привыкнуть и переписать свои скрипты так, что была совместимость с новыми версиями БД MySQL, так как дальнейшее развитие БД MySQL будет идти именно по такому пути, и возврата назад нет.
P.S. Работает 100-пудово. Кто не в курсе, о чём я пишу, просьба перейти по ссылке и больше в эту тему ни ногой. :)
Благодарю Nixoid'a за довольно ценную информацию, но есть обратная сторона вопроса: сделал всё по инструкции, всё работает, в базе везде cp1251_general_ci НО на главной странице форума (как впрочем и везде) одни вопросики.... Хотя в базе (phpmyadmin) всё отображается по-русски, как надо. (Форум VB 3.0.1)
...НО на главной странице форума (как впрочем и везде) одни вопросики.... Хотя в базе (phpmyadmin) всё отображается по-русски, как надо. (Форум VB 3.0.1)
Где можеть быть проблема?
проверь скин. На выходе у тебя скорее всего латиница.