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

Форум MySQL

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

 

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

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

тема: Хранимые процедуры теряют кириллицу
 
 автор: bdron   (16.12.2006 в 21:49)   письмо автору
 
 

Создаю в консоли хранимую процедуру, внутри которой есть проверка:

if (State = 'сдан') then


После вызова show create procedure, нету русских букв:

if (State = '????') then


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

   
 
 автор: cheops   (16.12.2006 в 22:29)   письмо автору
 
   для: bdron   (16.12.2006 в 21:49)
 

Вы настраивате кодировку соединения при помощи запроса
SET NAMES 'cp1251'

Где cp1251 - нужная вам кодировка? Дело в том, что начиная с версии 4.1 кодировку нужно настраивать везде и всегда, когда вы работаете с национальными символами, иначе они будут искажаться (как правило, превращаться в знаки вопроса).

   
 
 автор: bdron   (16.12.2006 в 22:47)   письмо автору
 
   для: cheops   (16.12.2006 в 22:29)
 

Я указал set names 'cp1251' перед проверкой в самой хранимой процедуре, вызвал set names 'cp1251' перед созданием процедуры, а потом еще и перед show create, и все равно...

   
 
 автор: bdron   (17.12.2006 в 19:28)   письмо автору
 
   для: cheops   (16.12.2006 в 22:29)
 

По моему мнению, проблема заключается в том, что хранимые процедуры храняться в information_schema, для которой задана кодировка utf8. Т.к. указать в определении хранимой процедуры параметр character_set нельзя, ее определение преобразуются в родную кодировку utf8. Таким образом перед show create procedure необходимо использовать оператор:


set names utf8


Тогда все будет по-русски.

Судя по тому, что процедуры выполняются правильно при передачи данных в кодировке cp1251, входные параметры также вначале преобразуются в utf8.

P.S. Все вышесказанное справедливо также и для show create view.

   
Rambler's Top100
вверх

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