MySQL запрос utf-8 символов (например, китайский) (также я использую Doctrine) - PullRequest
4 голосов
/ 10 сентября 2011
$q = $this->createQuery('q')
->where('q.group_id=?', $group_id)
->andWhere('q.content=?', $content)
    ->execute();

Если в моем контенте $ содержатся какие-либо символы Юникода (например, китайский / японский), это вызывает следующее сообщение:

SQLSTATE[HY000]: General error: 1267 Illegal mix of collations 
(latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

Кто-нибудь сталкивался с подобной проблемой раньше?

1 Ответ

1 голос
/ 11 января 2012

Вы можете использовать функцию COLLATE с MySQL в предложении where, вам нужно будет преобразовать входящие данные в параметры сортировки столбцов (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, который содержит подробности, это было в mysql от 4.1.

Вы также можете установить параметры сортировки для столбца в определении структуры таблицы (см. http://dev.mysql.com/doc/refman/5.6/en/charset-column.html) для деталей.

Надеюсь, это поможет.

...