SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.03.2012 19:49:12

Obormot
Участник
Зарегистрирован: 18.03.2012
Сообщений: 2

Помогите разобраться с кодировками

Уже 3тий день воюю с кодировками в базе, замучался окончательно.
Сначала был проблема только с выводом букв ш и и теперь выявились еще косяки.

Теперь по порядку:
Сам скрипт осуществляет вывод страниц в кодировке UTF-8:
Код:
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
При инсталяции скрипт загружает дамп БД с такими параметрами:
Код:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";;
ALTER DATABASE DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;;
под каждой таблицей в дампе:
Код:
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=%%__CONTESTS_INC__%% ;;
Все, отлично скрипт установили, теперь направляемся в БД через phpmyadmin, там спрашиваем:
Код:
SHOW VARIABLES LIKE 'character_set%';
Получаем ответ:
Код:
character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results    utf8
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/
В переводе я понимаю так:
character_set_client — указывает, в какой кодировке будут поступать данные от клиента;
character_set_connection — указывает, в какую кодировку следует преобразовать данные полученые от клиента перед выполнением запроса;
collation_connection — указывает, каким образом сравнивать между собой строки в запросах;
character_set_results — указывает серверу не необходимость перекодировать результаты запроса в определенную кодировку перед выдачей их клиенту.
Пока вроде все замечательно - скрипт должен записывать данные в БД в UTF-8, забирать данные так же в UTF-8, и выводить на свои страницы которые так же в UTF-8 !!
Теперь начинается самое интересное.
Идем в админку скрипта, меняем например заголовок страницы с Main на "Главная", сохраняем, идем в БД , а там:
Код:
Главная
Как так ?? Откуда взялась кодировка cp1251 или что это вообще??
Дальше еще интереснее. Меняем в ручную в базе заголовк на "Главная", сохраняем, теперь в базе все ок! Идем на главную страницу скрипта а там:
Код:
�������
я вообще ничего не понимаю.

Регистрируемся, получаем письмо на почту (смотрим кодировку шаблона письма в скрипте - UTF-8)! В письме есть инклуд меню сайта, соответтвенно при формировании письма скрипт берет данные из базы. Меню скрипта так же содержится в базе и так же изменяется из админки, меняем пунк меню из админки с "Home" на "Главная", в базе получаем все теже Сервис , но в письме этот пункт меню уже выглядит так:
Код:
Главная
- что за фигня  Откуда взялась еще кодировка какая то.. Что касается по скрипту, то классы подключения к БД не нашел, искал по файлам скрипта по запросам: "SET NAMES", так же искал слова "cp1251" "windows-1251" (думал он где нибуд перегоняте как-то) - ничего не нашел. По запросу mysql_connect намека на кодировки нет.

И это все еще дополняет кривые буквы Ш и и. ВОт так.
Прошу помочь дабы не сойти с ума : )



Так же любопытно что в скрипте было указано изначально в коде:
Код:
if( $title && $mainframe->cfg->use_multi_lang ) $title = preg_replace('/[^\040-\377]*/uis', '', $title);
С такой настройкой русские заголовки не выводились вообще, в другой теме подсказали что для utf нужно прописать так:
Код:
('/[^\040-\377]*/ui', '', $title);
Так тоже не выводились!
Стали выводиться когда прописал вариант для cp1251:
Код:
preg_replace('/[^\040-\377]*/i', '', $title);
Тоже для меня не понятно ! Откуда и где завуалирована кодировка cp1251.

Неактивен

 

#2 18.03.2012 20:28:00

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите разобраться с кодировками

В скрипте сразу после подключения нужно выполнить mysql_query("SET NAMES UTF8");
cp1251 может быть кодировкой соединения по умолчанию и тогда, хотя таблица и utf, mysql ждет от клиента запросы в cp1251. Такая настройка у многих хостеров.

Неактивен

 

#3 18.03.2012 23:09:26

Obormot
Участник
Зарегистрирован: 18.03.2012
Сообщений: 2

Re: Помогите разобраться с кодировками

А как выполнить mysql_query("SET NAMES UTF8"); в скрипте ?
Или это выполнить через phpmyadmin  ??

Неактивен

 

#4 19.03.2012 02:58:46

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите разобраться с кодировками

Надо эту команду выполнить в скрипте после вызова функции mysql_connect();

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson