我真的不知道我在做什么错我的下面的查询;MySQL查询问题;非法组合的操作类似'
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%' 或d.name LIKE '%my_query%' 或S。名LIKE '%my_query%' 或m.fullName LIKE '%my_query%' 或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_ł%')
如果我不使用联接,我可以使用ł并仍然保持id和entryDate字段在我的查询中没有任何问题。
SELECT ID,标题,entryDate FROM pre_tickets
WHERE
softDelete = '0' 和 PARENT_ID = '0' 和 状态= '0' 和 (ID LIKE“%my_query_ł% 'OR标题LIKE '%my_query_ł%' OR entryDate LIKE '%my_query_ł%')
ORDER BY ID降序 LIMIT 0,25
id是integer
字段,而entryDate是datetime
字段。
如果有人能向我解释我做错了什么,我该如何解决这个问题?
你的字符是UTF8编码吗?你从哪里得到它? – Tchoupi 2013-03-20 22:08:18
你的_connection_使用什么字符集? – Wrikken 2013-03-20 22:10:06
我在我的问题中增加了一些细节。感谢您提出这些问题。 @Wrikken我为我的连接使用了UTF-8字符集。 @Mathieu;那么我直接从PhpMyAdmin运行查询,就像你上面看到的一样。当我不使用连接时,那么相同的查询按预期工作。 – Revenant 2013-03-20 22:14:52