在MySQL中是否可以使用多字符到单字符的排序规则?

时间:2019-07-31 08:09:08

标签: mysql collation

我有一个MySQL数据库。每个记录都包含一个标题。一些记录包含标题Edelweiss和双s,另一些记录包含标题Edelweiß和eszett。

我希望用户能够搜索任一字符串,并获取所有拼写结果。

使用我当前的归类utf8_general_ci,看来ß等效于s。是否有一种方法可以使ß等效于ss,以便搜索ss将产生包含ß的结果?

2 个答案:

答案 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 然后使用HAVINGLIKE的组合进行过滤以过滤结果。

您也可以这样写

SELECT * FROM test
WHERE replace(fullname,'ss','ß') 
LIKE '%ß%' or replace(fullname,'ß','ss') like '%ß%';

注意:您可以在我需要的搜索中替换我写“%ß%”的部分。例如'%Edelweiß%'