与俄罗斯人物相似的学说

时间:2014-11-06 13:47:18

标签: mysql symfony doctrine-orm sql-like

我正在使用doctrine查询构建器来过滤记录,这是我认为导致问题的部分:

$query = $query->where('i.offernumber LIKE :search')
    ->orWhere('o.client LIKE :search')
    ->orWhere('o.sticker LIKE :search')
    ->orWhere('o.gu LIKE :search')
    ->orWhere('o.project LIKE :search')
    ->orWhere('o.quantity LIKE :search')
    ->orWhere('o.date LIKE :search')
    ->leftJoin('o.previous', 'p')
    ->leftJoin('p.input', 'pi')
    ->orWhere('pi.offernumber LIKE :search')
    ->setParameter('search', "%".$search."%");

问题是当我输入俄语字母字符时出现以下错误:

An exception occurred while executing 'SELECT c0_.id AS id0, c0_.client AS client1, c0_.quantity AS quantity2, c0_.next AS next3, c0_.status AS status4, c0_.date AS date5, c0_.sticker AS sticker6, c0_.gu AS gu7, c0_.project AS project8, c0_.completed AS completed9, c0_.rversion AS rversion10, c0_.input_id AS input_id11, c0_.previous AS previous12, c0_.user_id AS user_id13 FROM crm_order c0_ LEFT JOIN crm_input c1_ ON c0_.input_id = c1_.id LEFT JOIN crm_order c2_ ON c0_.previous = c2_.id LEFT JOIN crm_input c3_ ON c2_.input_id = c3_.id WHERE c1_.offernumber LIKE ? OR c0_.client LIKE ? OR c0_.sticker LIKE ? OR c0_.gu LIKE ? OR c0_.project LIKE ? OR c0_.quantity LIKE ? OR c0_.date LIKE ? OR c3_.offernumber LIKE ?' with params ["%\u041f\u0440\u0438\u0442\u043e\u0447\u043d\u0430\u044f%", "%\u041f\u0440\u0438\u0442\u043e\u0447\u043d\u0430\u044f%", "%\u041f\u0440\u0438\u0442\u043e\u0447\u043d\u0430\u044f%", "%\u041f\u0440\u0438\u0442\u043e\u0447\u043d\u0430\u044f%", "%\u041f\u0440\u0438\u0442\u043e\u0447\u043d\u0430\u044f%", "%\u041f\u0440\u0438\u0442\u043e\u0447\u043d\u0430\u044f%", "%\u041f\u0440\u0438\u0442\u043e\u0447\u043d\u0430\u044f%", "%\u041f\u0440\u0438\u0442\u043e\u0447\u043d\u0430\u044f%"]:

SQLSTATE[HY000]: General error: 1271 Illegal mix of collations for operation 'like'

可能导致此错误的原因是什么,有没有办法解决?

修改

在推送代码并尝试各种组合后,我确定了错误的原因,它是 以下两行:

->orWhere('o.quantity LIKE :search')
->orWhere('o.date LIKE :search')

因为这两个变量不是字符串(数字和日期mysql类型),并且上面的查询尝试" LIKE%string%"对于不是字符串类型的列它会导致错误。与此 post

中的问题相同

这个问题的解决方案可能是什么,因为我仍然需要搜索字符串,数字和日期?

1 个答案:

答案 0 :(得分:0)

您是否在config.yml

中设置了字符集
doctrine:
    dbal:
        {# ... #}
        charset:  UTF8