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 |
+----------------------+-----------------+

テーブル'addresses'にもとがutf8_general_ciありutf8ます。他のクエリでも問題ないので、FrantiškaKříž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 に答える