utf8_bin vs utf8_general_ci umlaute case insensivity

时间:2017-03-12 14:42:51

标签: php mysql utf-8 case-sensitive

在我的sql查询中使用匹配时,我遇到了德语umlauteäöü的问题

当我搜索“äpfel”时,我在使用 utf8_general_ci 时也会“ apfel ”,但我想要的只是获得“< strong>äpfel“,现在当我改为 utf8_bin 时,我得到的确是但是区分大小写。所以Äpfel Apfel 将无法找到äpfel apfel

我需要 utf8_bin_ci 哪个确实不存在我假设?

使用utf8_bin与匹配和更低(字段)或lcase(字段)结果出现错误,所以....我该怎么做才能解决这个问题?

查询就像;

select * FROM table where MATCH(field) AGAINST ('äpfel')

以及我需要但不起作用的是

select * FROM table where MATCH(lcase(field)) AGAINST ('äpfel')

在utf8_bin

2 个答案:

答案 0 :(得分:0)

听起来确实需要utf8_bin_ci,但它不存在,只有utf8_bin

如果您想添加不区分大小写,则需要将LOWER()添加到以下两个元素中:

mysql> SELECT LOWER('Äpfel') = LOWER('äpfel') COLLATE utf8_bin;
+----------------------------------------------------+
| LOWER('Äpfel') = LOWER('äpfel') COLLATE utf8_bin   |
+----------------------------------------------------+
|                                                  1 |
+----------------------------------------------------+
1 row in set (0.00 sec)

-> expected result


mysql> SELECT LOWER('Äpfel') = LOWER('apfel') COLLATE utf8_bin;
+---------------------------------------------------+
| LOWER('Äpfel') = LOWER('apfel') COLLATE utf8_bin  |
+---------------------------------------------------+
|                                                 0 |
+---------------------------------------------------+
1 row in set (0.00 sec)

-> expected result as well

更新:另请注意这个有趣的类似答案:utf8_bin vs. utf_unicode_ci

答案 1 :(得分:0)

唉,您可以选择比较比特(无大小写或重音折叠)与..._bin或同时使用所有..._ci整理进行大小写折叠和重音剥离。

This提供有关哪些字符等效或不相同的信息。例如,在utf8_german2_ci中,这些被视为相等:

    A=a=ª=À=Á=Â=Ã=Å=à=á=â=ã=å=Ā=ā=Ą=ą

但是这些在排序后会出现:

    ae=Ä=Æ=ä=æ

值得注意的是:_general_ci从不将2个字母对视为等于单个字符,因此aeæutf8_general_ci中必然不相等。