Кракрзябры

Очень часто на различных форумах, я видел, как начинающие и не очень РНР программисты рвали на себе волосы борясь с "кракозябрами".

На самом деле все неприятности начинаются из-за того, что базы данных, программы, мультиязычные и в последнее время хранят строчки не в виде бинарных кодировок, а в виде последовательности UTF8. Отсюда следует, что, если отправить базе данных данные и не указать в какой они кодировке, то база предположит что данные поступают в кодировке по умолчанию...

А по умолчанию, у MySQL сервера, кодировка latin1_sweden. Итак, когда строка попадает серверу, он в зависимости от дефолтных настроек сохраняет данные при этом искажая их. Чтобы этого не происходило надо просто создавать таблицы с указанием нужной кодировки, например:

CREATE TABLE crm_comm (
 `guid` int(11) NOT NULL auto_increment,
 `user` int(11) NOT NULL,
 `data_c` int(11) NOT NULL,
 `text` text NOT NULL,
 `org` int(11) default NULL,
 PRIMARY KEY  (guid)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251

В данном случае DEFAULT CHARSET=cp1251 это кодировка по умолчанию для этой таблицы.

Но это еще не все. Базе данных так-же необходимо сообщить в какой кодировке мы передаем данные и хотим эти данные получить. Для этого надо послать вот такие запросы:

В какой кодировке отдаем даные серверу

SET character_set_client = cp1251

В какой кодировке хотим получить ответ

SET character_set_results = cp1251

Или лучше вот так:

SET NAMES cp1251

Все, теперь база данных будет корректно работать с кодировкой cp1251... Для других кодировок аналогично.

Меню

Web Знания

Web Разработка

Реклама