前の質問からこの回答を得ただけで、うまくいきます!
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
各テーブルの照合タイプを確認し、それらが同じ照合を持っていることを確認してください。
その後、操作で使用する各テーブルフィールドの照合タイプも確認します。
私は同じエラーに遭遇しました、そして、そのトリックは私に働きます。
どの列が間違った照合であるかを確認する方法は次のとおりです。
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';
[MySQL]
これらの(非常にまれな)場合:
たとえば、テーブルからではなく、明示的な列挙からの値:
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ドキュメント を参照してください。
私はPhpMyadminで同じエラーを受け取っていましたが、ここで示された解決策を実行しました
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
照合エラーの不正な組み合わせMySQLエラー また、スウェーデン語を使用する場合を除き、一般的な言語を使用することをお勧めします。
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
alter table users convert to character set latin1 collate latin1_swedish_ci;
ストアドプロシージャ内のwhere句で同じエラーが発生しました。同じテーブル/列によって以前にロードされたローカル宣言変数で問題が発生することを発見しました。
データを単一のchar型にキャストすることを解決しました。
ここでの問題は、主に、このcast(field as varchar)またはcast(fields as date)のようにフィールドをキャストするだけです
要するに、このエラーは、MySQLが照合設定が異なる2つの操作を実行しようとしたために発生します。設定を一致させると、エラーはなくなります。もちろん、データベースの用途に応じて、データベースに適切な設定を選択する必要があります。
2つの非常に一般的なutf8照合順序の選択に関するいくつかの良いアドバイスを次に示します。 tf8_general_ciとutf8_unicode_ciの違いは何ですか
PhpMyAdminを使用している場合、エラーメッセージに記載されている表を操作し、各列の照合タイプを確認することで、体系的にこれを行うことができます。まず、データベースの全体的な照合設定がどれであるかを確認する必要があります-phpMyAdminはこれを通知し、必要に応じて変更できます。ただし、各テーブルの各列には独自の設定を設定できます。通常、これらすべてを一致させる必要があります。
小さなデータベースでは、これは手作業で行うのに十分簡単であり、いずれにしても、エラーメッセージを完全に読んだ場合、通常は適切な場所を指し示します。サブテーブルを含む列の「構造」設定も忘れずに確認してください。一致しない照合が見つかった場合、phpMyAdminを直接使用して変更できます。クエリウィンドウを使用する必要はありません。その後、操作を再試行してください。エラーが解決しない場合は、探し続けてください!
各列照合をlatin1_general_ciからlatin1_swedish_ciに変更する必要があります
私も同じエラーを受け取りましたが、私の場合、主な問題はwhereにあり、チェックしているパラメーターに不明な隠し文字がありました(+%A)
A0変換すると160を得たが、160はdbが認識している文字の範囲外であったため、データベースは認識できない文字として他のものは私のテーブルの列はvarcharです
私がやった解決策は、そのような文字がいくつかあることを確認し、sqlコマンドを実行する前にそれらを削除することでした
例:-preg_replace( '/\D /'、 ''、$ myParameter);
可能な限りascii_binを使用すると、ほぼすべての照合と一致します。とにかく、ユーザー名が特殊文字を受け入れることはめったにありません。
0から1に設定されたフィールドのコレクション警告についても同じ問題があります。すべての列コレクションは同じでした。コレクションを再度変更しようとしますが、この問題を解決するものはありません。
最後に、フィールドをNULL
に更新し、その後1に更新すると、コレクションの問題が解決します。
SELECT username, AVG(rating) as TheAverage, COUNT(*) as TheCount
FROM ratings
WHERE month='Aug'
AND username COLLATE latin1_general_ci IN
(
SELECT username
FROM users
WHERE gender = 1
)
GROUP BY
username
HAVING
TheCount > 4
ORDER BY
TheAverage DESC, TheCount DESC;
各関数のすべてのパラメーターに「utf8」を設定する必要があります。それは私の場合です:
この問題を解決するために構文の変更を避けたい場合は、これを試してください:
MySQLをバージョン5.5以降に更新します。
これで問題は解決しました。