【问题标题】:MySQL exact search for also foreign charactersMySQL精确搜索外来字符
【发布时间】:2012-07-27 18:32:14
【问题描述】:

我有一个以 UTF-8 编码的 MySQL 数据库,其中包含英语和匈牙利语文本。

我正在开发一个搜索功能,结果是可以接受的,除了一件事:

搜索包含“á”、“é”、“í”、“ó”、“ö”、“ő”、“ú”、“ü”、“ű” 的字符串会得到所有出现的结果,但还显示“a”、“e”、“i”、“o”、“u”的结果。这样搜索就不会很精确,因为它会产生很多不需要的记录,例如,我们得到了所有“bar”的“bar”(显然不一样)。

我以简单的方式通过 LIKE 进行了搜索(尽管它对于全词搜索或确切的词序有很多变体,但基本是相同的):

SELECT * FROM table WHERE coloumn LIKE 'word'

如何避免不需要的结果?我不是 SQL 专家,也从未进行过这样的搜索,所以我需要一点帮助...

谢谢!

【问题讨论】:

  • 您应该查看this question(如果您还没有)。它不包含解决方案,但它可能仍然有帮助。
  • 我查看了它,似乎在所有排序规则中提到的字符都是相同的(á=a、é=e 等)。有人在这个问题上提到了这个link。添加排序规则会是解决方案吗?

标签: mysql search foreign-keys character filtering


【解决方案1】:

不确定这是否可行,但您可以尝试使用

CAST(value1 AS BINARY) = CAST(value2 AS BINARY)

直接比较

POSITION( CAST(value1  as BINARY) IN CAST(value2  as BINARY))

检查 value1 是否是 value2 的子字符串。
MySQL 不会为它们使用索引,因此您可能应该将它们与普通的 WHERE 一起使用。

【讨论】:

  • 看来我只用 CAST 就得到了想要的结果:SELECT * FROM table WHERE coloumn LIKE CAST('word' AS BINARY) 它只找到所需的出现,所以现在很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
相关资源
最近更新 更多