SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.01.2013 01:35:35

dos32
Участник
Зарегистрирован: 06.02.2012
Сообщений: 13

поскажите с кодировками перемнных в процедуре

собственно вопрос такой
база в нормальной кодировке 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)

Неактивен

 

#2 11.01.2013 02:45:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: поскажите с кодировками перемнных в процедуре

емнип, локальные переменные работают в кодировке сервера.

Неактивен

 

#3 11.01.2013 10:05:18

dos32
Участник
Зарегистрирован: 06.02.2012
Сообщений: 13

Re: поскажите с кодировками перемнных в процедуре

по сути все проихсодит внутри процедуры, т.е. берем проедуру с таким тестом

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)

Неактивен

 

#4 11.01.2013 10:55:04

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: поскажите с кодировками перемнных в процедуре

character_set_server               |                      latin1         

Отсюда и знаки вопроса. Пользовательские переменные (@) используют кодировку соединения, т.е. utf8 в данном случае.

Неактивен

 

#5 11.01.2013 18:03:35

dos32
Участник
Зарегистрирован: 06.02.2012
Сообщений: 13

Re: поскажите с кодировками перемнных в процедуре

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

Неактивен

 

#6 11.01.2013 18:12:57

dos32
Участник
Зарегистрирован: 06.02.2012
Сообщений: 13

Re: поскажите с кодировками перемнных в процедуре

да, не сервере с правильным character_set_server все 3 результата нормальные.
просто тест на внешнй-публичной копии базы на неудачном сервере ...
ну в принципе там куда оно переедет скоро сервер правильный

Неактивен

 

#7 11.01.2013 18:47:13

dos32
Участник
Зарегистрирован: 06.02.2012
Сообщений: 13

Re: поскажите с кодировками перемнных в процедуре

оригинальненько ...
на целевом сервере все работает и 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\        |
-------------------------------------------------------------------------------------------------------

Неактивен

 

#8 11.01.2013 18:55:02

dos32
Участник
Зарегистрирован: 06.02.2012
Сообщений: 13

Re: поскажите с кодировками перемнных в процедуре

решилось ... после изменения character_set_server выгрузил базу. создал пустую базу явно указав 1251, загрузил дамп ... пашет .. хотя перед этим база стояла latin, но все таблици были 1251. почему тольо на процедраз видать и вылезло

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson