我真的不知道我的以下查询做错了什么;
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 运行查询,结果相同)。我使用 UTF-8 进行连接(SET NAMES utf8
命令)。
当我不使用 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_ł%')
如果我不使用JOINs,我可以使用ł并且仍然在我的查询中保留 id 和 entryDate 字段而没有任何问题。
从 pre_tickets 中选择 id、title、entryDate
在哪里
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
字段。
如果有人能解释我做错了什么以及如何解决这个问题,我会很高兴?