Задавайте вопросы, мы ответим
Вы не зашли.
собственно вопрос такой
база в нормальной кодировке 1251, все работает
делаю
SELECT groups.GRP_NAME
FROM
groups
WHERE
groups.GRP_ID = pGrpId
все отлично, результат нормальный? русские читаются
а если делаю
DECLARE cGrpName CHAR(255);
SELECT groups.GRP_NAME
FROM
groups
WHERE
groups.GRP_ID = pGrpId
INTO
cGrpName;
а потом в конце
select cGrpName;
(я так результаты нескольких запросов с единичным значением в итоге вернуть должен в разных столбцах)
так вот сам первый селест в DBFORGE и в php-клиенте вижу нормально, а если селект в переменную а потом ее другим селектом на вывод то с кодировкой проблема, кракозяблики
в принципе если делаю select в переменную которая начинается с @ то все работает
а собственно чтобы переменные которые по declare локальные нормально с кодировками сработали как в процедуре поступить ?
я конечно и сессионными @перемнными пока обойдусь, но вроде локальные как-то красивше ...
Отредактированно dos32 (11.01.2013 01:36:26)
Неактивен
емнип, локальные переменные работают в кодировке сервера.
Неактивен
по сути все проихсодит внутри процедуры, т.е. берем проедуру с таким тестом
DECLARE var1 CHAR(255);
SELECT 'траляля' ;
SELECT 'траляля' into var1;
SELECT var1;
SELECT 'траляля' into @var2;
SELECT @var2;
получаем первый вариант (просто селект из базы) нормально русский
второй вариант через переменную var1 нечитамый-???????
третийвариант через переменную @var2 нормальный ...
т.е. не могу понять, внутри процедуры сервер сам корректно с кодировками не разбирается ?
переменные выглядят так :
=======================================================================================================
| Variable_name | Value |
=======================================================================================================
| character_set_client | utf8 |
-------------------------------------------------------------------------------------------------------
| character_set_connection | utf8 |
-------------------------------------------------------------------------------------------------------
| character_set_database | latin1 |
-------------------------------------------------------------------------------------------------------
| character_set_filesystem | binary |
-------------------------------------------------------------------------------------------------------
| character_set_results | utf8 |
-------------------------------------------------------------------------------------------------------
| character_set_server | latin1 |
-------------------------------------------------------------------------------------------------------
| character_set_system | utf8 |
-------------------------------------------------------------------------------------------------------
| character_sets_dir | C:\WEBSERVER\mysql\share\charsets\ |
-------------------------------------------------------------------------------------------------------
поптка сделать в процедуре SET NAMES 'cp1251'; портит 2 нормальных результата до неотображаемых, а торой как был вопросами так и есть
и чем работа с кодироками @-переменных отличается от тех что в declare ?
Отредактированно dos32 (11.01.2013 10:07:26)
Неактивен
character_set_server | latin1
Отсюда и знаки вопроса. Пользовательские переменные (@) используют кодировку соединения, т.е. utf8 в данном случае.
Неактивен
т.е.только перезапуском сервера если он доступен ? вообще неожиданно конечно внутри процедуры , т.е. просто текст на выход нормально, а через переменную портим ...
итого если сервер может оказаться недоступен для настроек типа хостинга, то остаются только @переменные, так ?
Неактивен
да, не сервере с правильным character_set_server все 3 результата нормальные.
просто тест на внешнй-публичной копии базы на неудачном сервере ...
ну в принципе там куда оно переедет скоро сервер правильный
Неактивен
оригинальненько ...
на целевом сервере все работает и character_set_server там 1251, а не этом где на грабли наступил добился настроек ... теперь character_set_server и один бес процедура во втором результате косячит ....
=======================================================================================================
| Variable_name | Value |
=======================================================================================================
| character_set_client | utf8 |
-------------------------------------------------------------------------------------------------------
| character_set_connection | utf8 |
-------------------------------------------------------------------------------------------------------
| character_set_database | latin1 |
-------------------------------------------------------------------------------------------------------
| character_set_filesystem | binary |
-------------------------------------------------------------------------------------------------------
| character_set_results | utf8 |
-------------------------------------------------------------------------------------------------------
| character_set_server | cp1251 |
-------------------------------------------------------------------------------------------------------
| character_set_system | utf8 |
-------------------------------------------------------------------------------------------------------
| character_sets_dir | C:\WEBSERVER\mysql\share\charsets\ |
-------------------------------------------------------------------------------------------------------
Неактивен
решилось ... после изменения character_set_server выгрузил базу. создал пустую базу явно указав 1251, загрузил дамп ... пашет .. хотя перед этим база стояла latin, но все таблици были 1251. почему тольо на процедраз видать и вылезло
Неактивен