2009-04-23 35 views
1

我得到這個錯誤:MySQLiQuery_Exception '有消息' 的歸類(latin1_swedish_ci,隱含的)非法結構和(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' 

正如你所看到的,我想從表格地址中獲取一個ID。

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_ciutf8。我想這與查詢FrantiškaKřížka有關,因爲可以與其他查詢結合使用。 server_collat​​ion曾經是latin_swedish_ci,但我想我現在已經設法改變了這一切(正如您從上表中看到的那樣)。提前致謝。

+0

是的,所有的字段仍然在latin1上。我會找出如何改變它的所有領域。謝謝! – Ian 2009-04-23 18:03:41

回答

0

您可以將您的問題爲「shiptoaddress」和「shiptozip」列的排序規則:你提出

SHOW FULL COLUMNS FROM addresses; 

從證據看,有什麼可能會發生的是,「shiptoaddress」列還有latin1編碼。設置表格的編碼/排序規則時,您將設置默認值。這個默認值可以覆蓋個別列。

如果查詢適用於where address = 'Frank',但不適用於where address = 'Františka'這是因爲「Františka」不能轉換爲latin1。

相關問題