2014-11-06 61 views
0

我使用学说查询生成器来筛选记录,这是我认为这是导致问题的一部分:主义LIKE带俄语字符

$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' 

什么可能会造成这个错误,并且是有办法解决这个问题?

编辑

围绕推动代码,并试图各种组合之后,我精确定位错误的原因,它的 这2条如下因素线:

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

Apratently那些2个变量不是字符串(数字和日期的MySQL类型),并且上面的查询尝试为“LIKE%string%”查找不是字符串类型的列它会导致错误。与此相同的问题post

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

+0

[故障排除“的排序规则的非法组合”错误在MySQL(可能重复http://stackoverflow.com/questions/3029321/troubleshooting-illegal-mix-的-归类误差合的MySQL) – Mihai 2014-11-06 13:54:20

回答

0

你有没有在config.yml设置字符集

doctrine: 
    dbal: 
     {# ... #} 
     charset: UTF8