КракрзябрыОчень часто на различных форумах, я видел, как начинающие и не очень РНР программисты рвали на себе волосы борясь с "кракозябрами". На самом деле все неприятности начинаются из-за того, что базы данных, программы, мультиязычные и в последнее время хранят строчки не в виде бинарных кодировок, а в виде последовательности 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... Для других кодировок аналогично. | Реклама |