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