MySQL查询问题;操作“非常”的非法混合排序

时间:2013-03-20 22:04:38

标签: mysql pdo

我真的不知道我对以下查询做错了什么;

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.name 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_ł%'或s.name LIKE'%my_query_ł%'或m.fullName LIKE'%my_query_ł%'或main.title LIKE'%my_query_ł%')

  3. 如果我不使用 JOIN ,我会使用ł并仍然在我的查询中保留id和entryDate字段,没有任何问题。

    SELECT id,title,entryDate 来自pre_tickets

    在哪里

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

    ORDER BY id desc LIMIT 0,25

  4. ID integer字段,而 entryDate datetime字段。

    如果有人能解释我做错了什么以及如何解决这个问题,我会很高兴的?

1 个答案:

答案 0 :(得分:0)

由于没有答案,我决定回答我自己的问题;

我实际上并没有修复它,但我发现了问题并尽可能地使查询工作而不会出错。

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

我希望这会有所帮助。