ФорумРазработкаУстановка и администрирование ПОСерверы баз данных → Вопрос для тех, кто использует mysql stored procedures(routines)...

Вопрос для тех, кто использует mysql stored procedures(routines)...

  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 23 сентября 2010 г. 18:01

    Мне интересно, вы никогда не замечали, что даже после того, когда все глобальные переменные сервера, которые касаються кодировки и сопоставления выставлены в единственное значение (например utf8/utf8_general_ci), то на символьную строку(например sql-типа TEXT), которая используеться в качестве аргумента процедуры - всеравно не распостраняеться облоасть видимости глобальных переменных.

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

    Но когда для такого аргумента задать явно
    UPDTAE users SET feedback_text = FeedbackText/*argument*/ COLLATE utf8_general_ci where id = @VAR_ID;

    то тогда вот после явного задания сопоставления(COLLATE) - все символы(и латинка и кирилица в т.ч.) отображаються нормально..

    Что это такое? Баг разработчиков? Или так и должно быть: в теле функций глобальные переменные сервера не владеют силой? В последнем случае - это парадокс - ведь глобальные переменные - на то и глобальные что в теле ф-ции/класса они тоже должны быть видимы.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 сентября 2010 г. 18:03, спустя 2 минуты 17 секунд

    гуглил уже?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 23 сентября 2010 г. 18:12, спустя 8 минут 57 секунд

    Да гуглил, но чтото блекло… или не совсем по тем тэгам ищу…

    Официал. документация несколько слов кинула
    For character data types, if there is a CHARACTER SET attribute in the declaration, the specified character set and its default collation are used. If there is no such attribute, as of MySQL 5.0.25, the database character set and collation that are in effect at the time the server loads the routine into the routine cache are used. (These are given by the values of the character_set_database and collation_database system variables.) If the database character set or collation change while the routine is in the cache, routine execution is unaffected by the change until the next time the server reloads the routine into the cache. The COLLATE attribute is not supported. (This includes use of BINARY, which in this context specifies the binary collation of the character set.)


    (http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html)

    Говорят можно сначала обявлять атрибут CHARACTER SET перед ф-цией, не знаю… даже..
    Но если ближе к делу - то что все должно быть нормально, что в кэше все значения переменных храняться…
    Может я чтото делаю не так… Или у меня старая версия..
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 23 сентября 2010 г. 18:17, спустя 5 минут 34 секунды

    Rotten, а ты после коннекта что устанавливаешь, если устанавливаешь…?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 сентября 2010 г. 18:18, спустя 43 секунды

    ну обнови версию и попробуй для начала, я не встречался с этими проблемами
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 23 сентября 2010 г. 18:18, спустя 15 секунд

    бля или у меня тупой вопрос? )))
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 23 сентября 2010 г. 18:23, спустя 4 минуты 14 секунд

    kostyl, после коннекта? тоесть? Переменные имеешь ввиду?
    Та оно все уже установлено в конф. файле…
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 23 сентября 2010 г. 22:10, спустя 3 часа 47 минут 51 секунду

    CREATE DEFINER = CURRENT_USER FUNCTION `NewProc`(`asdasdasd` char)
    RETURNS char CHARSET utf8
    BEGIN
    #Routine body goes here…

    RETURN '';
    END;;

    такое уже не катит?)
    Спустя 23 сек.
    если я правильно понял проблему - возврат текста в неправильной кодировке
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 24 сентября 2010 г. 11:46, спустя 13 часов 35 минут 33 секунды

    phpdude, Возможно, чтото в этом и есть… но в том случае когда ф-ция возвращает varchar/text строку…
    У меня же возвращает далеко не строку(целое число, свидетелств. о ошибке или успехе), но не об этом… У меня в теле процедуры происходит update/insert той стоки-аргумента что идет на вход ф-ции…
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 24 сентября 2010 г. 11:48, спустя 2 минуты 32 секунды

    Rotten, а, понял :) ну тут хз. не сталкивался еще)
    Сапожник без сапог
  • Yasumi

    Сообщения: 28 Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 22:07, спустя 694 дня 10 часов 18 минут

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

Пожалуйста, авторизуйтесь, чтобы написать комментарий!