我只是在学习 Metaphone 和 Double Metaphone 搜索算法,我有几个问题。根据 Metaphone Wiki 页面,我找到了几个带有实现的来源,特别是 MySQL 实现。我想用我的测试数据库对其进行测试,所以我首先导入了 here 的 metaphone.sql 文件(包含双元音功能)
现在,我有一个表 country,它在“名称”列中列出了所有国家/地区,例如'Afghanistan', 'Albania', 'Algeria' 等等。所以,首先,我想在表中创建一个新列来存储每个国家的双元音字符串。我运行了以下代码:
UPDATE country SET NameDM = dm(name)
一切正常。阿富汗的变音字符串是'AFKNSTN',阿尔巴尼亚的是'ALPN', Algolia 的是'ALKR;ALJR',等等。“太棒了,”我想。
但是,当我尝试查询该表时,却没有得到任何结果。根据 metaphone.sql 的作者,我遵循以下 SQL 语句的语法:
SELECT Name FROM tblPeople WHERE dm(Name) = dm(@search)
因此,我将此代码更改为以下内容:
SELECT * FROM country WHERE dm(name) = dm(@search)
当然,我将“@search”更改为我要查找的任何搜索词,但是在每个 SQL 查询之后我都得到了 0 个结果。
谁能解释一下这个问题?我是否遗漏了一些重要的东西,或者我只是简单地误解了 Metaphone 算法?
谢谢!
最佳答案
仔细查看排序规则/字符集/编码(它可以定义到列级别)。排序规则定义了如何比较字符串,但字符集可以暗示使用某种排序规则。也许您的文字字符串具有不同的字符集,导致字符串比较失败。
即使这可能是揭示
select name, length(name), char_length(name), @search, length(@search), char_length(@search) from tbl
.
show variables like 'character%'
.
show create table tbl
关于mysql - 为什么这个 MySQL 双元音功能不能正常工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10359637/