2009-04-23 8 views
1

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

+0

Да, все поля были все еще на latin1. Я узнаю, как изменить его для всех полей. Благодаря! – Ian

+0

Последний комментарий: запрос 'alter table addresses convert to character set utf8;' преобразует все столбцы в таблицу по умолчанию. – Ian

ответ

0

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

SHOW FULL COLUMNS FROM addresses; 

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^