【发布时间】:2017-09-09 03:55:51
【问题描述】:
我经常使用使用重音字符的语言,例如é。我将内容存储在“utf_8_bin”编码表中,并将重音字符转换为 HTML 实体。
因此,例如,“Términator”将在数据库中存储为“T & eacute ; rminator”(必须在其中添加空格以阻止其在线呈现)。
当用户搜索“términator”时,会找到匹配项,因为该查询也被转换为 HTML 实体,并且 SQL 查询将参数的两边都“小写”为“lcase”。
我现在遇到的问题是,客户希望能够搜索“终结者”(“e”上没有重音)以获得匹配“终结者”的结果。
我不希望改变我存储数据的方式,特别是因为存储 HTML 实体可以解决许多其他问题。所以我问是否有更简单的解决方案。谢谢!
【问题讨论】:
-
你试过用like运算符吗?此外,您可能必须双重存储数据以满足该要求。一个保持原样,然后又去掉了重音等。
-
也许比较两者的 levenshtein 可能会奏效,或者类似的东西......您是否预计该项目有一个大型数据库?
-
@SloanThrasher - 我正在使用 like 运算符:其中 lcase('Términator') like lcase('%content%')。内容实际上是一篇完整的文章。不过,双重存储数据是一个非常可行的解决方案——如果我找不到另一个解决方案,我会考虑这样做。谢谢。
-
@Shane - Levenshtein 本来是完美的选择 - 除了内容是一篇完整的文章,因此需要检查数千个单词每篇文章(它们将是数百个文章),并且距离总是必须至少为 8 (é) - 我认为。耻辱。
-
将所有 é 实例替换为搜索的字母 'e' 会不会有太多开销?
标签: php mysql html-entities