5

PHPクエリには次のものがあります。

SELECT tags.tag, theValues.* 
FROM ch09.tbl_tags tags 
RIGHT JOIN ((SELECT 'dog' as 'Vals')
UNION (SELECT 'cat' as 'Vals')) theValues on tags.tag = theValues.Vals

「RIGHTJOIN」の後、括弧内のすべてがユーザー入力からその場で作成されます。

MySQL 4では正常に機能しましたが、新しいコンピューターを使用して5.5をインストールし、SQLダンプをとしてインポートしましたUTF-8。しかし、私は得ます:

"操作'='の照合(latin1_swedish_ci、IMPLICIT)と(utf8_general_ci、COERCIBLE)の不正な組み合わせ"

クエリを作成するためのより良い方法がおそらくあります。必要なのは、ユーザーが1つの列に「Vals」として入力するすべてのものです。一致するタグがあるtbl_tags.tag場合は「tag」という列にあるはずです。それ以外の場合はタグ列は空白です。

Collat​​eを使用してみました:http ://www.answermysearches.com/mysql-fixing-illegal-mix-of-collat​​ions-message/352/ 、しかし私はそれを動作させることができません。

したがって、より良いクエリを作成するか、何らかの方法で照合関数を使用する必要がありますが、どのようにしたらよいでしょうか。

前もって感謝します。

クレイグ

4

1 に答える 1

8

次の質問を参照してください: MySQLエンコーディングの質問

問題は実際には列とSQLテキストのエンコーディングに関係していると思います。これを回避するには、WHERE句で次のようにCONVERT(aaa USING bbb)関数を使用してみてください。

SELECT tags.tag, theValues.* 
  FROM ch09.tbl_tags tags 
 RIGHT JOIN ((SELECT 'dog' as 'Vals')
       UNION (SELECT 'cat' as 'Vals')) theValues
   ON CONVERT(tags.tag USING utf8) = theValues.Vals

または、テーブルの列エンコーディングをUTF8に変更します。

お役に立てれば、

ジョン..。

于 2012-11-03T20:28:12.437 に答える