Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Доброго всем времени суток, у меня проблемы с кодировками. Как избавиться от ошибки:
Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
Перечитал уже много всего. Ничего не помогает. Пробовал использовать:
$conn = mysql_connect("localhost", "db_user", "xxxxxxxx") or die("Could not connect to localhost: " . mysql_error());
mysql_select_db("db_name", $conn) or die ("Can't use db_name: " . mysql_error());
mysql_query ("SET NAMES 'CP1251'");
mysql_query ("SET CHARACTER SET 'CP1251'");
не помогло.
Вот кому необходима инфа " SHOW VARIABLES":
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 /usr/share/mysql/charsets/
collation_connection utf8_unicode_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci
Неактивен
Подозреваю, что у вас эта ошибка в хранимой процедуре. Здесь set names уже не обойтись. Попробуйте сделать базу в cp1251.
P.S. На какой запрос он так ругается?
Неактивен
Нее, доктор, проблема не в этом. У Вас в базе написаны данные в одной кодировке, а
сравниваете Вы с данными в другой кодировке, несовместимой с Вашей.
Конкретно — в базе данные у Вас лежат в latin1, а пытаетесь сравнивать Вы с cp1251.
Правильный способ — хранить данные в нужной кодировке или в кодировке, совместимой
с нужной (например, utf8 совместима с любыми другими кодировками).
Имеет смысл прочитать статью: http://sqlinfo.ru/articles/info/5.html
и задавать конкретные вопросы после прочтения
P.S. Кстати, неправильный способ — сделать SET NAMES latin1. По идее, должно заработать.
Но повторяю: лучше разобраться и сделать правильно. Чтобы потом не жалеть
Неактивен
По сообщениям в других темах у меня сложилось впечатление, что с данными все в порядке. Например, явно указывали кодировку при создании таблиц. А сейчас создали процедуру и получили все радости жизни.
Например, параметры декларированные в процедуре будут в latin1.
Неактивен
Не вижу ничего про процедуру Или контекст из другого треда, или мне пора в отпуск
В данном случае я руководствовался character_set_database latin1 — если таблички создавались
без явного указания кодировок, то они создались в аккурат в latin1.
А вообще — можешь сэмулировать ситуацию, это очень легко:
[celestia] root test > create table zz (a char(1)) charset latin1; Query OK, 0 rows affected (0.00 sec) [celestia] root test > insert zz values ('1'); Query OK, 1 row affected (0.00 sec) [celestia] root test > set names cp1251; Query OK, 0 rows affected (0.00 sec) [celestia] root test > select * from zz; +------+ | a | +------+ | 1 | +------+ 1 row in set (0.00 sec) [celestia] root test > select * from zz where a = 'я'; ERROR 1267 (HY000): Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (cp1251_general_ci,COERCIBLE) for operation '='
Неактивен
Контекст из другой темы http://sqlinfo.ru/forum/viewtopic.php?id=1850
Товарищ как раз создавал процедуры, на базу не жаловался, а если бы данные лежали в latin1, то проблемы с большой долей вероятности были бы. Поэтому, я исходил из предположения, что данные хранятся в нормальной кодировке.
P.S. Пожалуй, я зря решил выступить в роли телепата, так как если первоначальное предположение не верно, то истину потом сложнее будет установить
Неактивен
Ай-ай, там длинный тред, оставляю тебе
Я бы начал с того, что проверил, в какой кодировке создана процедура, в INFORMATION_SCHEMA
есть, ну и пересоздал в utf8. Воизбежание.
Неактивен
Страниц: 1