【问题标题】:MySQL: Transform "LIKE" search to fulltext?MySQL:将“LIKE”搜索转换为全文?
【发布时间】:2026-02-24 17:00:02
【问题描述】:

我有一个非常简单的对 MySQL 的 LIKE 搜索,我想将其转换为全文。问题是我需要能够实现它,以便它以 X 开头。如下例所示:

SELECT column FROM table WHERE column LIKE "startswith%"

如您所见,查询返回所有以“startswith”开头的结果。我需要用全文来做到这一点。

这可能吗?

【问题讨论】:

  • 你的意思是LIKE "a very long text%" 吗?

标签: mysql search full-text-search transform sql-like


【解决方案1】:

不,这不是全文的工作方式(它实际上只是一个下面有松散单词的列表,没有关于相对于字符串的位置的信息)但是没有理由不能将 LIKE ... 作为额外的 @ 987654322@ 子句。如果您在column 上没有另一个键,FULLTEXT 仍然可以帮助获得较小的结果子集。如果您确实column 上有一个键,那么使用 FULLTEXT 是没有用的。

您可以使用ADD INDEX (column(123));(仅索引前 123 个字符)在列的开头设置键。这也适用于 text/blob 列(在后一种情况下,它是您给出的二进制长度)。

【讨论】:

  • 你能给我一个例子,或者一个例子的链接吗?这可能就是我要找的!
  • 一个例子到底是什么?您的 LIKE 有效,如果您没有密钥并且不想使用 FULLTEXT 而是设置我建议的密钥,请使用 ALTER TABLE tablename ADD INDEX (columname(123)); 或任何需要的宽度,如果您确实想使用 FULLTEXT快点,使用SELECT column FROM table WHERE MATCH(columnname) AGAINST ('your search string*' IN BOOLEAN MODE) AND columnname LIKE 'your search string%';
  • 是的,我这样做是为了速度。你给我的例子很好用! :)
  • INDEX 选项可能更快:P
【解决方案2】:

我不确定 MySQL,但在 SQL Server 中,您可以将列转换为 varchar 并对结果执行 LIKE,如下所示:

SELECT column FROM table WHERE CONVERT(varchar(255), column) LIKE 'startswidth%'

由于这是 ANSI 标准,我认为 MySQL 也会处理这个问题。

【讨论】:

  • 是的,MySQL 会处理它,但没有必要:LIKE 无需转换即可工作。