MySQL查询utf-8字符(例如中文)(另外,我正在使用Doctrine)

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

有没有人遇到过类似的问题?
1个回答

1

在MySQL的where子句中,您可以使用COLLATE函数,需要将传入的数据转换为列排序规则(latin1_swedish_ci)

$q = $this->createQuery('q')
->where('q.group_id=?', $group_id)
->andWhere('q.content = _latin1 ? COLLATE latin1_swedish_ci', $content)
    ->execute();

有关COLLATE函数的详细信息,请参阅http://dev.mysql.com/doc/refman/5.6/en/charset-collate.html,其中包含了该函数的详细信息。这个函数自从MySQL 4.1版本就存在了。

您也可以在表结构的定义中为每一列设置一个排序规则(请参见http://dev.mysql.com/doc/refman/5.6/en/charset-column.html)以获取更多细节。

希望这些能够帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接