53

以前の質問からこの回答を得たばかりで、うまくいきます!

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount 
FROM ratings WHERE month='Aug' GROUP BY username HAVING TheCount > 4
ORDER BY TheAverage DESC, TheCount DESC

しかし、この余分なビットを挿入すると、次のエラーが発生します。

ドキュメンテーション #1267 - 操作 '=' の照合 (latin1_swedish_ci,IMPLICIT) と (latin1_general_ci,IMPLICIT) の不正な組み合わせ

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM 
ratings WHERE month='Aug' 
**AND username IN (SELECT username FROM users WHERE gender =1)**
GROUP BY username HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC

表は次のとおりです。

id, username, rating, month

4

20 に答える 20

101

どの列が間違った照合であるかを確認する方法は次のとおりです。

SELECT table_schema, table_name, column_name, character_set_name, collation_name

FROM information_schema.columns

WHERE collation_name = 'latin1_general_ci'

ORDER BY table_schema, table_name,ordinal_position; 

そして、これを修正するためのクエリは次のとおりです。

ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin1 COLLATE 'latin1_swedish_ci';

リンク

于 2011-04-21T16:32:04.360 に答える
22

各テーブルの照合タイプをチェックし、それらが同じ照合を持っていることを確認してください。

その後、操作で使用する各テーブルフィールドの照合タイプも確認します。

私は同じエラーに遭遇しました、そしてそのトリックは私に働きます。

于 2009-09-29T10:01:24.807 に答える
19

【MySQL】

これらの(非常にまれな)ケースでは:

  • 異なる照合タイプが本当に必要な 2 つのテーブル
  • 値はテーブルからではなく、明示的な列挙から取得されます。たとえば、次のようになります。

    SELECT 1 AS 番号 UNION ALL SELECT 2 UNION ALL SELECT 3

CAST または CONVERT を使用して、異なるテーブル間で値を比較できます。

CAST('my text' AS CHAR CHARACTER SET utf8)

CONVERT('my text' USING utf8)

MySQL Web サイトでCONVERT および CAST のドキュメントを参照してください。

于 2016-05-17T11:58:34.537 に答える
7

PhpMyadminで同じエラーが発生し、ここに示されている解決策を実行しました。

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

Illegal mix of collat​​ion MySQL Error また、スウェーデン語の代わりに General を使用することをお勧めします。それは、スウェーデン語がデフォルトであり、アプリケーションがスウェーデン語を使用していない限り、この言語を使用しないためです。

于 2012-08-21T21:23:39.123 に答える
4

utf8に変換した方がいいと思います

--set utf8 for connection
SET collation_connection = 'utf8_general_ci'
--change CHARACTER SET of DB to utf8
ALTER DATABASE dbName CHARACTER SET utf8 COLLATE utf8_general_ci
--change CHARACTER SET of table to utf8
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
于 2016-03-03T06:53:20.013 に答える
2

私も同じエラーが発生しましたが、私の場合、主な問題は、チェックしているパラメーターに未知の隠し文字 ( +%A0 )が含まれている条件でした

A0変換時に 160 が得られましたが、160 は db が認識している文字の範囲外でした。そのため、データベースはそれを文字として認識できません。他のことは、テーブルの列が varchar であることです。

  • 私が行った解決策は、そのような文字がいくつかあることを確認し、SQLコマンドを実行する前にそれらを削除することでした

  • 例:- preg_replace('/\D/', '', $myParameter);

于 2018-11-29T11:29:48.493 に答える
1

各列の照合順序を latin1_general_ci から latin1_swedish_ciに変更する必要があります

于 2012-07-25T17:50:31.247 に答える
1

ここでの問題は主に、この cast(field as varchar) または cast(fields as date) のようにフィールドをキャストするだけです

于 2016-07-07T07:01:12.647 に答える
1
  • users.gender 列が INTEGER であることを確認してください。
  • 試す:alter table users convert to character set latin1 collate latin1_swedish_ci;
于 2009-08-06T22:31:51.197 に答える
1

つまり、このエラーは、MySQL が異なる照合設定を持つ 2 つの操作を実行しようとしたために発生します。設定を一致させると、エラーはなくなります。もちろん、データベースの用途に応じて、データベースの適切な設定を選択する必要があります。

2 つの非常に一般的な utf8 照合順序の選択に関する適切なアドバイスを次に示します。utf8_general_ci と utf8_unicode_ci の違い

phpMyAdmin を使用している場合は、エラー メッセージに記載されているテーブルを調べて、各列の照合タイプを確認することで、体系的にこれを行うことができます。最初に、データベースの全体的な照合設定を確認する必要があります。phpMyAdmin はこれを通知し、必要に応じて変更できます。ただし、各テーブルの各列には独自の設定を含めることができます。通常、これらすべてを一致させる必要があります。

小規模なデータベースでは、これは手作業で簡単に行うことができます。いずれにせよ、エラー メッセージを完全に読めば、通常は適切な場所が示されます。サブテーブルを含む列の「構造」設定も忘れずに確認してください。一致しない照合が見つかった場合は、phpMyAdmin を使用して直接変更できます。クエリ ウィンドウを使用する必要はありません。その後、操作を再試行してください。エラーが続く場合は、探し続けてください。

于 2014-03-26T11:34:06.933 に答える
0

この問題を解決するために構文を変更したくない場合は、次のことを試してください。

MySQL をバージョン 5.5 以降に更新します。

これで問題は解決しました。

于 2016-09-13T13:49:16.393 に答える
-2

MySQL のバージョンがサブクエリ (4.1+) をサポートしていることを確認してください。次に、クエリを次のように書き直してみてください。

SELECT ratings.username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM ratings, users 
WHERE ratings.month='Aug' and ratings.username = users.username
AND users.gender = 1
GROUP BY ratings.username
HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC
于 2009-08-06T22:27:49.863 に答える