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 に答える