Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Character set is not compiled ... and is not specified in the ....share\charsets\index.xml.
 
 автор: Sovetskiy   (04.10.2008 в 12:15)   письмо автору
 
 

Здравствуйте! Я только начал знакомиться с MySQL по книге Максима Кузнецова и Игоря Симдянова "MySQL 5 в подлиннике",- Санкт-Петербург, "БХВ-Петербург", 2006. Поэтому следующий мой вопрос --- наивный :-)

Версия MySQL у меня следующая: 5.1.22-rc-community, работаю в Windows Vista, а mysql.exe и прочие exe-шники установлены в C:\MySql\MySql5\bin\. В файле MySql5\My.ini по умолчанию имеем default-character-set = latin1. А мне нужно, чтобы кодировка по умолчанию была cp1251 или хотя-бы cp866. Меняю в My.ini так:

default-character-set = cp1251 или default-character-set = cp866.

Далее запускаю MySql.exe -u root и получаю сообщение:

"Character set 'cp1251' is not compiled character set and is not specified in the 'C:\mysql\\share\charsets\index.xml' file." (или такое же сообщение для случая cp866). Открываю указанный здесь index.xml и вижу, что в этом файле упомянуты кодировки cp1251 и cp866. Почему такое происходит и что я сделал не так?

  Ответить  
 
 автор: cheops   (04.10.2008 в 12:28)   письмо автору
 
   для: Sovetskiy   (04.10.2008 в 12:15)
 

Проследите, чтобы директива
default-character-set=cp1251

находилась в секции [mysqld] и отсутствовала во всех других секциях - эта ошибка возникает, когда директива попадает в секцию [client] или [mysql].

  Ответить  
 
 автор: Sovetskiy   (04.10.2008 в 18:49)   письмо автору
 
   для: cheops   (04.10.2008 в 12:28)
 

Cheops, благодарю за ответ. Однако понимания стало меньше. Буду признателен, если Вы ответите на следующие мои вопросы.

1) В указанной мной выше книге на странице 61 написано, что кодировка по умолчанию может быть указана в каждом из разделов (написано про [MySqld] и [Client]). Почему если сделать так, как написано в книге, возникает упомянутая ошибка?

2) Если следовать Вашей рекомендации и поместить директиву в секцию [MySqld], то разве это не означает, что кодировка по умолчанию устанавливается для сервера?

3) В той же книге написано, что сервер для Windows --- это MySqld-nt.exe, а в моём каталоге BIN\ такого файла нет, а MySqld.exe --- есть. В моей версии сервер --- это MySqld.exe?

4) Имеет ли клиент MySql.exe какое-нибудь отношение к серверу? Он взаимодействует как-нибудь с сервером? В моей ситуации после запуска MySql.exe никаких процессов, в названии которых фигурировало-бы слово MySql и отличных от MySql.exe, нет. В книге на 43 странице написано, что консольный клиент осуществляет доступ к MySql-серверу. Как же это происходит?

5) Захожу: MySql.exe -u root. Делаю новую базу Create database SHOP. Затем выхожу из клиента. Далее пытаюсь выполнить:

MySql.exe -u root shop < c:/MySql/MySql5/Base.sql,

причем в файле Base.sql (кодировка 1251) первые несколько строк такие:

CREATE TABLE catalogs (
id_catalog int(11) NOT NULL auto_increment,
`name` tinytext NOT NULL,
PRIMARY KEY (id_catalog),
FULLTEXT KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
INSERT INTO catalogs VALUES (1,'Процессоры');
INSERT INTO catalogs VALUES (2,'Материнские платы');
INSERT INTO catalogs VALUES (3,'Видеоадаптеры');
INSERT INTO catalogs VALUES (4,'Жёсткие диски');
INSERT INTO catalogs VALUES (5,'Оперативная память');

При выполнении таблица catalogs создается, но добавления строк не происходит и MySql говорит:

ERROR 1366 (HY000) at line 7: Incorrect String Value: '\xCF\xF0\...' for column 'name' at row 1.

Кодировка по умолчанию в My.Ini в секции MySqld.exe (согласно Вашей рекомендации) установлена cp1251.

Почему в описанной в этом пунке ситуации возникает ошибка 1366?

  Ответить  
 
 автор: cheops   (04.10.2008 в 19:19)   письмо автору
 
   для: Sovetskiy   (04.10.2008 в 18:49)
 

1) Это сработает, если mysql.exe правильно скомпилирован, к сожалению, эта ошибка в mysql.exe качует из версии в версию.
2) Да, совершенно верно. Вам в любом случае потребуется установить кодировку соединения вручную при помощи запроса вида
SET NAMES cp1251;

3) И такое возможно, это зависит от дистрибутива, у меня например два сервера: mysqld-debug.exe и mysqld-nt.exe. Однако в разных дистрибутивах количества различных вариантов сервера может достигать шести штук. Можете смело использовать mysqld.exe.
4) mysql.exe - это клиент, при помощи его вы можете обратиться к MySQL-серверу mysqld.exe, который в свою очередь и производит все вычисления. Задача mysql.exe принять от вас запрос, отправить его серверу, получить ответ и вывести его на экран. Если вы будете рабоать через PHP с MySQL, то клиент mysql.exe вам уже не потребуется, так как в качестве клиента будет выступать PHP-скрипт.
5) Если вы зашли в диалоговый режим mysql.exe, использовать команды оболочки уже нельзя - тут следует выполнять SQL-запросы или команды консольного клиента mysql. Например, для выполнения дампа, вам необходимо воспользоваться командой SOURCE
mysql> SOURCE c:/MySql/MySql5/Base.sql

Команду
MySql.exe -u root shop < c:/MySql/MySql5/Base.sql

можно выполнять, но не заходя в диалоговый режим mysql.exe.

  Ответить  
 
 автор: Sovetskiy   (04.10.2008 в 21:15)   письмо автору
 
   для: cheops   (04.10.2008 в 19:19)
 

1) Понял.

2) В base.sql после

CREATE TABLE CATALOGS ...

вставил строку

SET NAMES cp1251
и после этого из командной строки файл удалось успешно выполнить с помощью MySql.exe.

3) Понял.

4) Вот тут есть непонятное место. Из дистрибутива удалил MySqld.exe (а сохраненную копию переименовал). При этом MySql.exe выполняет запросы и ни на что не ругается, а вроде бы должен. Это не понятно.

5) Именно
 MySql.exe -u root shop < c:/MySql/MySql5/Base.sql
и хотелось выполнить.

Спасибо!

  Ответить  
 
 автор: cheops   (05.10.2008 в 10:57)   письмо автору
 
   для: Sovetskiy   (04.10.2008 в 21:15)
 

>4) Вот тут есть непонятное место. Из дистрибутива удалил MySqld.exe (а сохраненную копию
>переименовал). При этом MySql.exe выполняет запросы и ни на что не ругается, а вроде бы
>должен. Это не понятно.
Давайте на другом пример, вот имеется Web-сервер Apache - httpd.exe вы к нему можете обращать из браузеров IE - iexplore.exe, Opera - opera.exe и т.д. Apache и браузер - это две разные программы, они даже зачастую на разных хостах выполняются. Здесь тоже самое mysqld.exe - это сервер, mysql.exe - это клиент, своеобразный SQL-браузер, две разные программы. Если вы удалите mysql.exe - серверу будет все-равно. Более того, при помощи mysql.exe вы можете обращаться не только к локальному MySQL-серверу, но и удаленному (если права доступа позволяют).

PS Более того, в реальной практике к mysql.exe прибегают в зачастую только для работы с дампами (вот как вы сейчас работаете), в основном используют альтернативные клиенты (как в Web могут использовать альтернативные браузеры) - графические клиенты или Web-интерфейс вроде phpMyAdmin. Здесь на форуме в качестве клиента выступает движок форума, его задачи точно такие же как у mysql.exe - путем обращения к MySQL-серверу помещать нашу с вами информацию в базу данных, извлекать её по требованию и отображать. Разница только в том, что в mysql.exe необходимо писать SQL-запросы, а тут кнопки нажимать. Если удалить форум, MySQL-сервер продолжит работу как ни в чем ни бывало.

  Ответить  
 
 автор: Sovetskiy   (05.10.2008 в 20:53)   письмо автору
 
   для: cheops   (05.10.2008 в 10:57)
 

Прошу прощения за занудство.

Я удалял не клиента, а сервер . При этом, клиент всё-равно работал (то есть ситуация симметрична той, что описали выше вы). Именно это непонятно.

  Ответить  
 
 автор: cheops   (06.10.2008 в 10:33)   письмо автору
 
   для: Sovetskiy   (05.10.2008 в 20:53)
 

Да, именно, так - это две независимые программы, если одной нет - другая может спокойно работать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования