Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Всем привет!
Подскажите, пожалуйста, что не так с COLLATION. Внутри хранимой процедуры для одного из запросов специально устанавливается COLLATE utf8_bin. При вызове процедуры получаю ошибку: ERROR 1253 (42000): COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'.
Отредактированно FiMko (29.04.2012 17:32:18)
Неактивен
Посмотрите SHOW CREATE TABLE - какой charset для данных в таблице?
Неактивен
Кажется, решил проблему. До создания хранимых процедур делал SET NAMES cp866; (см. http://sqlinfo.ru/forum/viewtopic.php?id=2498) Сейчас попробовал пересоздать хранимую процедуру после SET NAMES utf8; - вызов процедур заработал. Правда не понимаю почему, что это - collation для хранимых процедур получается есть ?
Отредактированно FiMko (29.04.2012 18:23:30)
Неактивен
rgbeast написал:
Посмотрите SHOW CREATE TABLE - какой charset для данных в таблице?
Для всех таблиц принудительно при создании установлено COLLATE utf8_general_ci; или COLLATE utf8_bin; Сравнение latin1 нигде не использую.
Неактивен
Возможно, в процедуре использовались переменные строкового типа.
http://dev.mysql.com/doc/refman/5.5/en/create-procedure.html написал:
For character data types, if there is a CHARACTER SET attribute in the declaration, the specified character set and its default collation is used. If the COLLATE attribute is also present, that collation is used rather than the default collation. If there is no CHARACTER SET attribute, the database character set and collation in effect at routine creation time are used. (The database character set and collation are given by the value of the character_set_database and collation_database system variables.)
Неактивен
rgbeast написал:
Возможно, в процедуре использовались переменные строкового типа.
http://dev.mysql.com/doc/refman/5.5/en/create-procedure.html написал:
For character data types, if there is a CHARACTER SET attribute in the declaration, the specified character set and its default collation is used. If the COLLATE attribute is also present, that collation is used rather than the default collation. If there is no CHARACTER SET attribute, the database character set and COLLATION IN EFFECT AT ROUTINE CREATION TIME ARE USED. (The database character set and collation are given by the value of the character_set_database and collation_database system variables.)
Да, есть и строковые переменные и в сети тоже видел упоминание про такое поведение. Теперь уже почти наверняка уверен, что именно из-за строковых переменных и наблюдал такую проблему. Спасибо!
Отредактированно FiMko (29.04.2012 20:57:38)
Неактивен
Страниц: 1