MySQL查询utf-8字符(如中文)(还有,我用的是Doctrine)

标签 mysql sql utf-8 doctrine mysql-error-1267

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

相关文章:

mysql - 在没有MYSQL的PC上使用MYSQL数据库

mysql - 外键编辑

mysql - MySQL 中的大型唯一键

c - 在 ICU 中打印 UTF-8 字符串

javascript - 如何将套接字信息自动添加到MySQL

java - 将数据库 ID 添加到 Eclipse 组合

sql - 更新Sqlite3列,关键匹配问题

SQL 重新格式化时间戳字段

sql - 选择一个月的第一天和当前日期之间的所有日期

java - 如何在不使用 BOM 的情况下识别不同的编码?