$q = $this->createQuery('q')
->where('q.group_id=?', $group_id)
->andWhere('q.content=?', $content)
->execute();
如果我的 $content 包含任何 unicode 字符(例如中文/日文),这会导致以下消息:
SQLSTATE[HY000]: General error: 1267 Illegal mix of collations
(latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
有没有人遇到过类似的问题?
最佳答案
您可以在where子句中使用MySQL的COLLATE函数,将需要将入站数据转换为列排序规则(latin1_swedish_ci)
$q = $this->createQuery('q')
->where('q.group_id=?', $group_id)
->andWhere('q.content = _latin1 ? COLLATE latin1_swedish_ci', $content)
->execute();
有关整理功能的详细信息,您可以查看http://dev.mysql.com/doc/refman/5.6/en/charset-collate.html。其中有详细信息,这已经在 4.1 的 mysql 中。
您还可以在表结构的定义中设置每列的排序规则(参见 http://dev.mysql.com/doc/refman/5.6/en/charset-column.html )以获取详细信息。
希望这对您有所帮助。
关于MySQL查询utf-8字符(如中文)(还有,我用的是Doctrine),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369169/