|
|
|
| Здравствуйте! Я только начал знакомиться с 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. Почему такое происходит и что я сделал не так? | |
|
|
|
|
|
|
|
для: Sovetskiy
(04.10.2008 в 12:15)
| | Проследите, чтобы директива
default-character-set=cp1251
|
находилась в секции [mysqld] и отсутствовала во всех других секциях - эта ошибка возникает, когда директива попадает в секцию [client] или [mysql]. | |
|
|
|
|
|
|
|
для: 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? | |
|
|
|
|
|
|
|
для: Sovetskiy
(04.10.2008 в 18:49)
| | 1) Это сработает, если mysql.exe правильно скомпилирован, к сожалению, эта ошибка в mysql.exe качует из версии в версию.
2) Да, совершенно верно. Вам в любом случае потребуется установить кодировку соединения вручную при помощи запроса вида
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. | |
|
|
|
|
|
|
|
для: cheops
(04.10.2008 в 19:19)
| | 1) Понял.
2) В base.sql после
CREATE TABLE CATALOGS ...
|
вставил строку и после этого из командной строки файл удалось успешно выполнить с помощью MySql.exe.
3) Понял.
4) Вот тут есть непонятное место. Из дистрибутива удалил MySqld.exe (а сохраненную копию переименовал). При этом MySql.exe выполняет запросы и ни на что не ругается, а вроде бы должен. Это не понятно.
5) Именно
MySql.exe -u root shop < c:/MySql/MySql5/Base.sql
| и хотелось выполнить.
Спасибо! | |
|
|
|
|
|
|
|
для: 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-сервер продолжит работу как ни в чем ни бывало. | |
|
|
|
|
|
|
|
для: cheops
(05.10.2008 в 10:57)
| | Прошу прощения за занудство.
Я удалял не клиента, а сервер . При этом, клиент всё-равно работал (то есть ситуация симметрична той, что описали выше вы). Именно это непонятно. | |
|
|
|
|
|
|
|
для: Sovetskiy
(05.10.2008 в 20:53)
| | Да, именно, так - это две независимые программы, если одной нет - другая может спокойно работать. | |
|
|
|