поддержка кодировок в MySQL 4.1 на примере Punbb

Недавно при переносе веб-сайта python.com.ua столкнулись с проблемой поддержки кодировок в php-форуме Punbb. Все давно знают что MySQL c ветки 4.1 поддерживает работу с текстовыми данными в разных кодировках, но пости всем php-шникам почему-то напряжно вставить три строчки кода лишние, чтоб небыло проблем с кодировкой.
Данная заметка будет полезна не только при работе с utf-8, но вообще о конвертации текстовых SQL-данных.
Итак, как работать с кодировками:
  1. создать базу в нужной кодировке;
  2. если данные уже есть и просто переносятся на новую базу, то нужно узнать в какой кодировке данные в файле дампа (под unix в этом поможет утилита file и в файле дампа дописать строку SET NAMES КОДИРОВКА, где КОДИРОВКА, то в какой кодировке сохранен у вас файл дампа;
  3. потом в дистрибутиве форума нужно найти файл include/common.php и прописать там кодировку, в которой данные должны отображаться у вас на сайте, эта кодировка может быть отлична от той, в которой хранятся данные в базе;
  4. после этого нужно всё проверить, должно работать; не забывайте про сам html, который генерируется там должна быть кодировка соответствующая пункту 3.
Теперь немного конкретики на примере тогоже форума...
В нашем случае дамп базы был в кодировке win-1251. Определили мы просто:
file forum_dump.sql
База данных была в кодировке UTF-8, т.к. там уже стояла до этого mediawiki и она нативно поддерживает юникод. Мы решили хранить данные для форума тоже в юникоде, поэтому записали команду выбора кодировки в сам файл дампа самой первой:
SET NAMES CP1251;
Внимание! Пишется именно кодировка в которой сам дамп базы
    теги: