2013-03-20 27 views
0

我真的不知道我在做什么错我的下面的查询;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排序规则来支持这些字符吗?

注:

这里是怪异的一部分;

  1. 如果我不使用ł我的查询,然后我的查询工作

    (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%')

  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. 如果我不使用联接,我可以使用ł并仍然保持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

idinteger字段,而entryDatedatetime字段。

如果有人能向我解释我做错了什么,我该如何解决这个问题?

+0

你的字符是UTF8编码吗?你从哪里得到它? – Tchoupi 2013-03-20 22:08:18

+1

你的_connection_使用什么字符集? – Wrikken 2013-03-20 22:10:06

+0

我在我的问题中增加了一些细节。感谢您提出这些问题。 @Wrikken我为我的连接使用了UTF-8字符集。 @Mathieu;那么我直接从PhpMyAdmin运行查询,就像你上面看到的一样。当我不使用连接时,那么相同的查询按预期工作。 – Revenant 2013-03-20 22:14:52

回答

0

既然没有答案,我决定回答我自己的问题;

但是我没有真正修复它,但是我发现问题并尽可能使查询工作而不会出错。

我的解决方案是从查询中删除所有整数字段。这样我没有得到任何错误。这不是一个好的解决方案,但至少它仍然允许我在没有出现错误的情况下搜索一些字段。

我希望这会有所帮助。