Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Illegal mix of collations


Автор: VasyaVasin 20.12.2007, 12:29
Здравствуйте, проблема в следующем. Ставлю MediaWiki (http://www.mediawiki.org/wiki/MediaWiki/ru), процесс установки проходит, создаётся БД, но при запросе к index.php выдаёт следующая ошибка:

Обнаружена ошибка синтаксиса запроса к базе данных. Последний запрос к базе данных: 
(SQL запрос скрыт) 
произошёл из функции «Article:ageData». MySQL возвратил ошибку «1267: Illegal mix of collations (cp1251_bin,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=' (mysqlserver)». 

Насколько я понял проблема с конфликтом кодировок. Я нашёл решение этой проблемы - создание в phpMyAdmin БД с нужным мне чарсетом. Но хостер (инфобокс) не даёт доступ к созданию БД с помощью phpMyAdmin, а только к редактированию.

В общем прошу подсказать что сделать? По идее с крипте MediaWiki там где она подключается в базе, нужно прописать кодировку, но где именно я так и не нашёл.

Заранее спасибо.

Автор: skyboy 20.12.2007, 12:38
Цитата(VasyaVasin @  20.12.2007,  11:29 Найти цитируемый пост)
Насколько я понял проблема с конфликтом кодировок. 

да. в одном(а может - и не в одном) запросе используется сравнение полей из двух разных таблиц, с разными кодировками. Вот СУБД и не знает, как сравнить две строки,каждая из которых закодирована по-своему.
Или же константа в запросе имеет кодировку по умолчанию, которая не совпадает с кодировкой поля, с которым происходит сравнение.
Цитата(VasyaVasin @  20.12.2007,  11:29 Найти цитируемый пост)
По идее с крипте MediaWiki там где она подключается в базе, нужно прописать кодировку

http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html. впрочем, если бы кодировка подключения была бы неверно установлена, у тебя скорее возник бы вопрос о том, что текст выводится не в той кодировке и выглядит нечитаемым.
Цитата(VasyaVasin @  20.12.2007,  11:29 Найти цитируемый пост)
Но хостер (инфобокс) не даёт доступ к созданию БД с помощью phpMyAdmin, а только к редактированию.

зачем тебе создавать БД? тебе же таблицы в существующей БД создавать надо. А кодировка по умолчанию может быть изменена и для БД, и для отдельной таблицы. Только, кажется мне, проблема у тебя в другом.

Автор: Feldmarschall 20.12.2007, 12:39
не обязательно создавать БД с нужным чарсетом. Чарсет можно указывать при создании таблиц

Добавлено через 1 минуту и 27 секунд
А, точно! Можно ведь попробовать поменять умолчания для БД.
Вот тут http://phpfaq.ru/charset хорошо написано

Автор: VasyaVasin 20.12.2007, 12:58
При запросе set names cp1251 выдаётся, что база в нужной мне кодировке.

MySQL-кодировка: UTF-8 Unicode (utf8) 
Сопоставление соединения с MySQL: cp1251_bin

Т.е. получается, что кодирвока по умолчанию стоит?

Автор: Feldmarschall 20.12.2007, 13:10
при запросе set names ничего вообще не выдается.

Получается, что кодирвока по умолчанию стоит. только непонятно, какая тебе с того разница.

Автор: VasyaVasin 20.12.2007, 13:16
Тогда получается, что я жутко туплю или чего-то не понимаю...
Как мне добиться нужного результата? smile

Автор: Feldmarschall 20.12.2007, 13:24
Я, вообще-то, ссылку давал.

Автор: VasyaVasin 20.12.2007, 22:27
Проблема решилась проще.

в коде скрипта, в том месте, где он коннектица к базе добавил 3 строчки:

mysql_query ("set collation_connection='latin1_bin'");

mysql_query ("set character_set_client='cp1251'");

mysql_query ("set character_set_results='cp1251'");

Автор: Feldmarschall 20.12.2007, 23:01
Очень странное решение.
Думается мне, будут ещё проблемы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)