在MySQL中使用希腊字符搜索函数

时间:2011-06-18 18:20:25

标签: php mysql function search unicode

我有一个旧希腊词(Wearch.nl)的搜索功能 古希腊词语有mutch口音,ῦ与ὐ不一样,但我希望如果你键入“u”,你会得到ῦ和ὐ(以及其他5种变体)的结果。我正在使用MySQL的LIKE函数来获得结果。
我可以搜索所有这些但我希望它可以更短更快。

1 个答案:

答案 0 :(得分:2)

如果您能够更改列(或表)的字符集,请将其设置为utf8_general_cilink 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字段)。对此字段执行搜索并将重音字段返回给应用程序。