在 MySQL 中是否可以进行 multi-character-to-single-character 归类?
Are multi-character-to-single-character collations possible in MySQL?
我有一个 MySQL 数据库。每条记录都包含一个标题。一些记录包含带有双 s
的标题 Edelweiss
,而其他包含带有 eszett 的标题 Edelweiß
。
我希望用户能够搜索任一字符串并返回任一拼写的所有结果。
根据我当前的排序规则 -- utf8_general_ci -- 看起来 ß
等同于 s
。有没有办法让 ß
等同于 ss
,以便搜索 ss
会产生包含 ß
?
的结果
下面的这个解决方案可行,但可能不是最好的
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ß%”
如所见here :
utf8_general_ci
考虑 s=ß
utf8_general_mysql500_ci
表示 ß
在 Z
之后
所有其他 utf8
归类将 ss
和 ß
视为相等。
因此,(至少)更改列的排序规则。
注意:所有 _general_
归类一次只查看一个字符。大多数其他归类更复杂。另一个例子是 ae=æ
或 æ
是否被视为单独的 "letter".
我有一个 MySQL 数据库。每条记录都包含一个标题。一些记录包含带有双 s
的标题 Edelweiss
,而其他包含带有 eszett 的标题 Edelweiß
。
我希望用户能够搜索任一字符串并返回任一拼写的所有结果。
根据我当前的排序规则 -- utf8_general_ci -- 看起来 ß
等同于 s
。有没有办法让 ß
等同于 ss
,以便搜索 ss
会产生包含 ß
?
下面的这个解决方案可行,但可能不是最好的
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ß%”
如所见here :
utf8_general_ci
考虑 s=ß
utf8_general_mysql500_ci
表示 ß
在 Z
之后
所有其他 utf8
归类将 ss
和 ß
视为相等。
因此,(至少)更改列的排序规则。
注意:所有 _general_
归类一次只查看一个字符。大多数其他归类更复杂。另一个例子是 ae=æ
或 æ
是否被视为单独的 "letter".