我有一个旧希腊词(Wearch.nl)的搜索功能
古希腊词语有mutch口音,ῦ与ὐ不一样,但我希望如果你键入“u”,你会得到ῦ和ὐ(以及其他5种变体)的结果。我正在使用MySQL的LIKE函数来获得结果。
我可以搜索所有这些但我希望它可以更短更快。
答案 0 :(得分:2)
如果您能够更改列(或表)的字符集,请将其设置为utf8_general_ci
(link to manual):
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8_general_ci;
使用此字符集(不区分大小写,由_ci
表示),重音字符具有相同的权重(用于collation的值),因此它们相互比较时返回true (link to manual):
非UCA排序规则是一对一的 从字符代码到权重的映射。 在MySQL中,这种排序规则就是这种情况 不敏感和重音不敏感。 utf8_general_ci就是一个例子:'a', 'A','À'和'á'各有不同 字符代码但都有重量 0x0041并且比较相等。
mysql> SET NAMES 'utf8' COLLATE 'utf8_general_ci';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT 'a' = 'A', 'a' = 'À', 'a' = 'á';
+-----------+-----------+-----------+
| 'a' = 'A' | 'a' = 'À' | 'a' = 'á' |
+-----------+-----------+-----------+
| 1 | 1 | 1 |
+-----------+-----------+-----------+
1 row in set (0.06 sec)
或者,或者如果你不能以这种方式改变数据库配置,你可以编写一个函数来用它的非重音等价物替换重音字符(即é
- > e
)并写入将其转换为专用搜索字段(建议使用full-text search字段)。对此字段执行搜索并将重音字段返回给应用程序。