MySQLiQuery_Exception 'с сообщением' Неверное сочетание параметров сортировки (latin1_swedish_ci, IMPLICIT) и (utf8_general_ci, COERCIBLE) - с PHP5 - PullRequest
1 голос
/ 23 апреля 2009

У меня есть эта ошибка:

Fatal error: Uncaught exception 'MySQLiQuery_Exception' with message 'Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=': select id from 'addresses' where 'shiptozip'='13000' and 'shiptostreet'='Františka Křížka'

Как видите, я пытаюсь получить идентификатор из таблицы адресов.

mysql> show variables like 'character%';

+--------------------------+----------------------------+
| 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> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

Где таблица 'адреса' также имеет utf8_general_ci и utf8. Я думаю, это как-то связано с запросом Františka Křížka, как и другие запросы. Раньше server_collation было latin_swedish_ci, но я думаю, что мне все это удалось изменить (как вы можете видеть из приведенных выше таблиц). Заранее спасибо.

1 Ответ

0 голосов
/ 23 апреля 2009

Можете ли вы добавить к вашему вопросу сопоставление для столбцов "shiptoaddress" и "shiptozip" из:

SHOW FULL COLUMNS FROM addresses;

Исходя из представленных вами данных, вероятно, что столбец "shiptoaddress" все еще имеет кодировку latin1. Когда вы устанавливаете кодировку / сопоставление для таблицы, вы устанавливаете значение по умолчанию. Это значение по умолчанию может быть переопределено для отдельных столбцов.

Если запрос работает для where address = 'Frank', но не работает для where address = 'Františka', это потому, что «Франтишка» не конвертируется в латиницу1.

...