次のクエリで何が間違っているのか本当にわかりません。
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 照合はそのような文字をサポートすべきではありませんか?
ノート:
ここに奇妙な部分があります。
クエリでłを使用しない場合、クエリは機能します
(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%')
クエリでłを使用し、クエリから 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_ł%')
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
idはinteger
フィールドですが、entryDateはdatetime
フィールドです。
誰かが私に何が間違っているのか、どうすればこの問題を解決できるのかを説明してくれたら本当にうれしいです。