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 (mysql UDF实现strtr C函数)

或者您可以在插入数据之前对其进行规范化。

于 2013-06-13T21:17:03.573 回答