Проблема с кодировкой в хранимых процедурах

vandy

Новичок
Проблема с кодировкой в хранимых процедурах

Проблема стандартная:
Я, используя веб-интерфейс, пытаюсь сохранить в MySql русские слова, но сохраняются только "???????????????".

Подробнее.
У меня есть хостинг с установленным на нем MySQL 5.0.19-nt-log.
Так же я использую PHP 5.

В phpmyadmin я настроил базу на работу с cp1251_general_ci.

Так же у каждой таблицы и у каждого поля я тоже тоже постивил cp1251_general_ci.
Плюс к этому при коннекте также выставляю
mysql_query ("SET NAMES cp1251");
mysql_query ("SET CHARACTER SET cp1251");
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");

Но у меня все равно показывает ????????.

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

Так вот.
Если использовать обычный insert из пхп, то русские буквы нормально
сохраняются.
А если сначала передавать данные в mysql-процедуры, а потом вставлять в таблицы, то русские буквы превращаются в ??????.

Я пробовал и в процедуре перед insert выставлять
SET NAMES cp1251;
SET CHARACTER SET cp1251;
SET character_set_client = cp1251;
SET character_set_results= cp1251;
SET collation_connection = cp1251_general_ci;

Но это так же не помогло.
Может кто сталкивался с таким и нашел способ решения.
 

WP

^_^
1. ОС? Ясно же сказано, говорите ОС.
2. Не очень понимаю что значит SET перед insert? SET надо делать после коннекта к СУБД, и только один раз.
3. Что Вы понимаете под процедурами?
 

vandy

Новичок
ОС на сервере windows, какой точно не знаю.
Сам хостинг http://www.1gb.ru/

Да я уже везде ставил и после конекта и перед каждым вызовом процедуры.

пример процедуры

DELIMITER $$

DROP PROCEDURE IF EXISTS `kr_MENU_ADD_ITEM` $$
CREATE PROCEDURE `kr_MENU_ADD_ITEM` (
NAME varchar(45),
PARENT_ID int(10),
URL varchar(200),
USER_TYPE tinyint(3)
)

BEGIN
DECLARE pos tinyint(3) DEFAULT 1;

SELECT MAX(o.POSITION) INTO pos FROM kr_ORDER_MENU as o WHERE o.PARENT_ID = PARENT_ID;

SET NAMES cp1251;
SET CHARACTER SET cp1251;
SET character_set_client = cp1251;
SET character_set_results= cp1251;
SET collation_connection = cp1251_general_ci;

INSERT INTO kr_MENU (`NAME`, `PARENT_ID`, `URL`, `USER_TYPE_ID`)
VALUE (NAME, PARENT_ID, URL, USER_TYPE);

INSERT INTO kr_ORDER_MENU
VALUE (PARENT_ID, LAST_INSERT_ID(), pos + 1);

END $$

DELIMITER ;
 

WP

^_^
А зачем внутри процедуры? После коннекта и всё. Попробуй обратиться к админу хостинга чтоб посмотрел у себя конфиг.
 

vandy

Новичок
Я уже по всякому ставил чатсеты. Это был последний вариант.

и что он там должен посмотреть?
Админы, очень не любят напрягаться. Им надо говорить что тебе нужно.
 
Сверху