MySQL запрос utf-8 символов (например, китайский)(также я использую Doctrine)

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

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

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

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

1 ответ

Вы можете использовать функцию 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) для получения подробной информации.

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

Другие вопросы по тегам