我有一个MySQL数据库。每个记录都包含一个标题。一些记录包含标题Edelweiss
和双s
,另一些记录包含标题Edelweiß
和eszett。
我希望用户能够搜索任一字符串,并获取所有拼写结果。
使用我当前的归类utf8_general_ci,看来ß
等效于s
。是否有一种方法可以使ß
等效于ss
,以便搜索ss
将产生包含ß
的结果?
答案 0 :(得分:1)
如here所示:
utf8_general_ci
认为s=ß
utf8_general_mysql500_ci
说ß
在Z
之后
所有其他utf8
归类将ss
和ß
等同对待。
因此,更改(至少)该列的排序规则。
注意:所有_general_
归类一次只看一个字符。大多数其他归类更为复杂。另一个示例是将ae=æ
还是æ
视为一个单独的“字母”。
答案 1 :(得分:0)
下面的此解决方案有效,但可能不是最好的
SELECT *,replace(fullname,'ss','ß') rep1,replace(fullname,'ß','ss') rep2
FROM test
HAVING rep1 like '%ß%' or rep2 like '%ß%';
OR
SELECT *,replace(fullname,'ss','ß') rep1,replace(fullname,'ß','ss') rep2
FROM test
HAVING rep1 like '%ss%' or rep2 like '%ss%';
基本上,我创建了两列,将ss
替换为ß
,并将另一ß
替换为ss
然后使用HAVING
和LIKE
的组合进行过滤以过滤结果。
您也可以这样写
SELECT * FROM test
WHERE replace(fullname,'ss','ß')
LIKE '%ß%' or replace(fullname,'ß','ss') like '%ß%';
注意:您可以在我需要的搜索中替换我写“%ß%”的部分。例如'%Edelweiß%'