1
select count(answer1) as total, questionsResults.answer1 
    from questionsResults
    WHERE correct=1 GROUP by answer1

私の問題は、これが小文字と大文字をグループ化し、さらにアクセントを削除することです!

Bonjour pépé
bonjour pépé
Bonjour pepe

すべてがグループ化されます: 1 行になりますが、3 行が必要です: 小文字、大文字、さらにはアクセントを区別する必要があります!

どんな手掛かり ?

4

1 に答える 1

0

説明書より

COLLATE 句を使用すると、比較用のデフォルトの照合をオーバーライドできます。COLLATE は、SQL ステートメントのさまざまな部分で使用できます。

この動作は、使用中のコロケーションによって異なります。

必要なコロケーションは utf_bin です。

COLLATE を使用してクエリで直接指定できます

select count(answer1) as total, questionsResults.answer1 
from questionsResults
WHERE correct=1 GROUP by answer1 COLLATE 'utf8_bin'

ドキュメントは次の場所にあります。

http://dev.mysql.com/doc/refman/5.0/en/charset-collat​​e.html

もちろん、データベース内のコロケーションを変更することもできます。

逆に、それによるグループ化は次のように強制できます(これは私の最初の答えでした。質問を誤解していましたが、完全を期すために残します)

クエリで文字列関数を使用できます。

何かのようなもの:

GROUP by replace(lower(answer1),'é',e) 

これがフランス語の場合、あまり多くのアクセントが可能ではないため、これが解決策です.

関数を mysql にインポートすることもできます。たとえば、次のようになります: https://github.com/falcacibar/mysql-routines-collection/blob/master/tr.func.sql (strtr C 関数の MySQL UDF 実装)

または、挿入する前にデータを正規化することもできます。

于 2013-06-13T21:17:03.573 に答える