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

有没有人遇到过类似的问题?

4

1 回答 1

1

您可以在 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-collat​​e.html其中包含详细信息,这已在 4.1 中的 mysql 中。

您还可以在表结构的定义中设置每列的排序规则(请参阅http://dev.mysql.com/doc/refman/5.6/en/charset-column.html)以获取详细信息。

希望这可以帮助。

于 2012-01-11T03:40:37.413 回答