MySQLiQuery_Exception» с сообщением «Недопустимое сочетание сопоставлений (latin1_swedish_ci, IMPLICIT) и (utf8_general_ci, COERCIBLE) — с PHP5

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

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, но я думаю, что теперь мне удалось все это изменить (как вы можете видеть из приведенных выше таблиц). Заранее спасибо.


person Ian    schedule 23.04.2009    source источник
comment
Да, все поля были еще на latin1. Я узнаю, как изменить его для всех полей. Спасибо!   -  person Ian    schedule 23.04.2009
comment
И последний комментарий: запрос alter table addresses convert to character set utf8; преобразует все столбцы в таблицу по умолчанию.   -  person Ian    schedule 23.04.2009


Ответы (1)


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

SHOW FULL COLUMNS FROM addresses;

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

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

person Community    schedule 23.04.2009