在我的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
中答案 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
中必然不相等。