假设我的 wiki (MediaWiki 1.19.4) 中有这些页面标题:
SOMETHIng
Sómethìng
SomêthÏng
SÒmetHínG
如果用户搜索something
我希望所有 4 个页面都作为结果返回。
目前我唯一能想到的是这个查询(MySQL Percona 5.5.30-30.2):
SELECT page_title
FROM page
WHERE page_title LIKE '%something%' COLLATE utf8_general_ci
仅返回SOMETHIng
.
我必须走在正确的道路上,因为如果我搜索sóméthíng
OR SÓMÉTHÍNG
,我会得到SOMETHIng
结果。如何修改查询,以便按预期获得其他结果?此处的性能并不重要,因为该page
表仅包含约 2K 行。
这是具有相关位的表定义:
CREATE TABLE page (
(...)
page_title VARCHAR(255) NOT NULL DEFAULT '' COLLATE latin1_bin,
(...)
UNIQUE INDEX name_title (page_namespace, page_title),
)
不得修改表定义,因为这是 MediaWiki 和 AFAIK 的库存安装,其代码期望该字段以这种方式定义(即 unicode 存储为二进制数据)。