0

次のクエリで何が間違っているのか本当にわかりません。

SELECT 
main.id as id, d.name as departmentName, s.name as sectionName, m.fullName as fullName, main.title as title, main.entryDate as entryDate 
FROM pre_tickets as main 

INNER JOIN pre_ticketscategory as d ON d.id = main.mainCategory_id 
INNER JOIN pre_ticketscategory as s ON s.id = main.category_id 
INNER JOIN pre_members as m ON m.id = main.member_id  

WHERE 

main.softDelete = '0' AND 
main.parent_id = '0' AND 
main.status = '0' AND 
(main.id LIKE '%my_query_ł%' OR d.name LIKE '%my_query_ł%' OR s.name LIKE '%my_query_ł%' OR m.fullName LIKE '%my_query_ł%' OR main.title LIKE '%my_query_ł%' OR main.entryDate LIKE '%my_query_ł%') 

ORDER BY main.id desc 
LIMIT 0, 25

エラー

Illegal mix of collations for operation 'like'

3 つのテーブルはすべて (フィールドを含む);

文字セット: UTF-8

照合: utf_8_general_ci

私は PDO を使用しています (PHPMYAdmin と Navicat から直接クエリを実行しても同じ結果が得られました)。SET NAMES utf8接続(コマンド)にUTF-8を使用しています。

JOINS を使用しない場合、この問題は発生しません。

łを削除すると、すべてが期待どおりに機能し、エラーは発生しません。ただし、そうしないとエラーが発生します。UTF-8 文字セットと utf_8_general_ci 照合はそのような文字をサポートすべきではありませんか?

ノート:

ここに奇妙な部分があります。

  1. クエリでłを使用しない場合、クエリは機能します

    (main.id LIKE '%my_query%' OR d.name LIKE '%my_query%' OR s.name LIKE '%my_query%' OR m.fullName LIKE '%my_query%' OR main.title LIKE '%my_query%'または main.entryDate LIKE '%my_query%')

  2. クエリでłを使用し、クエリから main.id フィールドと main.entryDate フィールドを削除しても、クエリは機能します。

    (d.name LIKE '%my_query_ł%' OR s.name LIKE '%my_query_ł%' OR m.fullName LIKE '%my_query_ł%' OR main.title LIKE '%my_query_ł%')

  3. JOINを使用しない場合でも、 łを使用できるようになり、問題なくクエリに id および entryDate フィールドを保持できます。

    pre_tickets から ID、タイトル、エントリ日付を選択

    どこ

    softDelete = '0' AND parent_id = '0' AND status = '0' AND (id LIKE '%my_query_ł%' OR title LIKE '%my_query_ł%' OR entryDate LIKE '%my_query_ł%')

    ORDER BY id desc LIMIT 0、25

idintegerフィールドですが、entryDatedatetimeフィールドです。

誰かが私に何が間違っているのか、どうすればこの問題を解決できるのかを説明してくれたら本当にうれしいです。

4

1 に答える 1

0

答えがなかったので、私は自分の質問に答えることにしました。

実際には修正していませんが、問題を見つけて、エラーを発生させずにクエリを可能な限り機能させました。

私の解決策は、クエリからすべての整数フィールドを削除することでした。この方法でエラーは発生しませんでした。これは良い解決策ではありませんでしたが、少なくともいくつかのフィールドをエラーなしで検索することができました。

これが役立つことを願っています。

于 2013-09-14T11:42:33.517 に答える