SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 29.04.2012 17:31:19

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'

Всем привет!

Подскажите, пожалуйста, что не так с COLLATION. Внутри хранимой процедуры для одного из запросов специально устанавливается COLLATE utf8_bin. При вызове процедуры получаю ошибку: ERROR 1253 (42000): COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'.


mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.20    |
+-----------+

Был бы очень признателен за помощь.

Отредактированно FiMko (29.04.2012 17:32:18)

Неактивен

 

#2 29.04.2012 18:19:22

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'

Посмотрите SHOW CREATE TABLE - какой charset для данных в таблице?

Неактивен

 

#3 29.04.2012 18:19:38

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'

Кажется, решил проблему. До создания хранимых процедур делал SET NAMES cp866; (см. http://sqlinfo.ru/forum/viewtopic.php?id=2498) Сейчас попробовал пересоздать хранимую процедуру после SET NAMES utf8; - вызов процедур заработал. Правда не понимаю почему, что это - collation для хранимых процедур получается есть hmm ?

Отредактированно FiMko (29.04.2012 18:23:30)

Неактивен

 

#4 29.04.2012 18:20:35

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'

rgbeast написал:

Посмотрите SHOW CREATE TABLE - какой charset для данных в таблице?

Для всех таблиц принудительно при создании установлено COLLATE utf8_general_ci; или COLLATE utf8_bin; Сравнение latin1 нигде не использую.

Неактивен

 

#5 29.04.2012 18:38:44

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: COLLATION 'utf8_bin' is not valid for CHARACTER SET '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.)

Неактивен

 

#6 29.04.2012 20:57:11

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'

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)

Неактивен

 

Board footer

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