1

我有这个错误:

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ška Křížka 有关,因为它与其他查询有关。server_collat​​ion 曾经是,latin_swedish_ci但我想我现在已经设法改变了这一切(从上表中可以看出)。提前致谢。

4

1 回答 1

0

您能否将“shiptoaddress”和“shiptozip”列的排序规则附加到您的问题:

SHOW FULL COLUMNS FROM addresses;

根据您提供的证据,可能发生的是“shiptoaddress”列仍然具有 latin1 编码。当您为表设置编码/排序规则时,您正在设置默认值。可以为各个列覆盖此默认值。

如果查询适用where address = 'Frank'但不适用,where address = 'Františka'那是因为“Františka”不能转换为 latin1。

于 2009-04-23T16:08:29.243 回答