|
|
|
| Здравствуйте.
Проблема с запросами, в которых есть кириллица:
set character_set_connection='cp1251';
set character_set_client='cp1251';
set character_set_results='cp1251';
SET NAMES cp1251;
SELECT code, product, count FROM `table2` WHERE category='Аккумуляторы';
|
Утилитка mysql возвращает empty set. Если убрать из запроса 'Аккумуляторы', то всё прекрасно.
А phpMyAdmin нормально отрабатывает запрос, даже без установки character_set_connection, character_set_client и character_set_results.
Как заставить mysql корректно воспринимать кириллицу в запросе? | |
|
|
|
|
|
|
|
для: Хулиган
(09.10.2009 в 11:58)
| | Вот ещё дополнение: после установки character_set_connection и иже с ним в cp1251 проверяю через mysqladmin переменные - они по-прежнему установлены в latin1. Не меняются. | |
|
|
|
|
|
|
|
для: Хулиган
(09.10.2009 в 12:06)
| | Это кодировка соединения - она должна устанавливаться всякий раз при установки соединения между клиентом и сервером. | |
|
|
|
|
|
|
|
для: cheops
(09.10.2009 в 12:46)
| | это понятно, что кодировка соединения.
Почему она не меняется на 1251? Все время установлена в latin1. Хоть делай set character_set_connection хоть не делай.
Как её поменять? | |
|
|
|
|
|
|
|
для: Хулиган
(09.10.2009 в 13:22)
| | Вы хотите сказать, что последовательно выполняете
SET NAMES 'cp1251';
SHOW VARIABLES LIKE '%char%' ;
|
и видите latin1 в соответствующей строке?
А какая версия сервера? | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2009 в 13:44)
| | именно.
Версия 5.1.32 | |
|
|
|
|
|
|
|
для: Хулиган
(09.10.2009 в 14:09)
| | Я, конечно, допускаю, что можно скомпилировать и поставить сервер без поддержки конкретных или даже всех кодовых страниц. Но тогда это вопрос вменяемости предпочтений соответствующего сисадмина. | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2009 в 15:10)
| | Поддержка всех кодировок (включая ср1251) присутствует. Вы не совсем внимательно прочли топик: кириллица прекрасно распознается и отображается в результатах запроса. Проблема в том, что в самом запросе (а не в результатах) кириллица не работает.
Например
SELECT * FROM`table1` WHERE category='Аккумуляторы'
трансформируется в
SELECT * FROM`table1` WHERE category='????????????' | |
|
|
|
|
|
|
|
для: Хулиган
(09.10.2009 в 15:30)
| | Я не очень понимаю, что значит "трансформируется" .
А кодировку самой консоли Вы сменили на 1251?
Или так и набираете в OEM codepage (которая 866 в русской windows) | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2009 в 15:38)
| | ну ясно дело что кодировку панели сменил, я ведь вывод от select * from `table1`; нормально читаю.
О трансформации: я случайно внес ошибку в запрос, и получил сообщение, из которого видно следующее:
mysql> select * from `table2` wh ere category='Аккумуляторы' order by product asc;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version syntax to use near 'ere category='????????????' order by product asc' at line 1
Из этого сделал вывод, что до сервера вместо аккумуляторов доходят знаки вопроса.
Вот в чем собственно проблема | |
|
|
|
|
|
|
|
для: Хулиган
(09.10.2009 в 15:53)
| | >ну ясно дело что кодировку панели сменил, я ведь вывод от select * from `table1`; нормально читаю.
это ничего не значит.
Что выдает запрос SHOW VARIABLES LIKE '%char%' после SET CHARACTER SET 'cp1251' ? | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2009 в 16:52)
| | запрос выдает latin1.
А проблему победил при помощи параметра --default-character-set при коннекте
Всё вроде сейчас нормально. | |
|
|
|
|
|
|
|
для: Хулиган
(09.10.2009 в 17:39)
| | Запрос не выдает latin1 просто в силу того, что этот запрос выдает несколько строк. | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2009 в 18:00)
| | это я для краткости написал latin1.
Интересующие меня character_set_client, character_set_results, character_set_connection стоят в латин. | |
|
|
|
|
|
|
|
для: Хулиган
(09.10.2009 в 17:39)
| | может у Вас сервер запущен с параметром --skip-character-set-client-handshake ? | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2009 в 18:45)
| | Да черт его знает, как оно там запускается.
Просто сделал батник, в нем net start MySQL и всё.
Может где-то в каком-то конфиге прописано что-то не так. Не знаю.
Главное, понял как устранить, хотя и не нашёл первопричину, которую просто нет времени искать и разбираться. | |
|
|
|
|
|
|
|
для: Хулиган
(09.10.2009 в 11:58)
| | Если речь идет об утилите mysql, необходимо перед её запуском сменить кодировку командной строки при помощи команды (при этом вместо точечных шрифтов, не поддерживающих кирилицу, необходимо выбрать Lucida Console)
После запуска mysql, необходимо выполнить запрос
| |
|
|
|
|
|
|
|
для: cheops
(09.10.2009 в 12:12)
| | С выводом всё нормально. SELECT * FROM `table1` выводит всё в читабельном виде. С нормальной кириллицей.
Проблема возникает, если в запросе кириллица. Возвращается пустой результат.
mysql> select * from `table1` where category='Аккумуляторы';
Empty set (0.00 sec)
|
| |
|
|
|