在MySQL的文本列中搜索字符串

use*_*154 61 mysql search sql-like

我有一个mysql表,其中有一个列将xml存储为字符串.我需要找到xml列包含6个字符的给定字符串的所有元组.没有其他事情 - 我需要知道的是这个6字符串是否存在.

因此,将文本格式化为xml可能无关紧要.

问题:如何在mysql中搜索?即 SELECT * FROM items WHERE items.xml [contains the text '123456']

有没有办法可以使用LIKE运算符来执行此操作?

Mik*_*icz 99

您可以使用该LIKE子句进行一些简单的字符串匹配:

SELECT * FROM items WHERE items.xml LIKE '%123456%'
Run Code Online (Sandbox Code Playgroud)

如果您需要更多高级功能,请在此处查看MySQL的全文搜索功能: http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html


小智 11

使用like可能需要更长的时间,因此请使用full_text_search:

SELECT * FROM items WHERE MATCH(items.xml) AGAINST ('your_search_word')
Run Code Online (Sandbox Code Playgroud)

  • 事实证明这比LIKE快吗? (10认同)
  • 重要的是要注意,要实现此目的,必须在目标列上具有“ FULLTEXT”索引。 (4认同)
  • 为了进一步扩展其他人,FTS 与“LIKE”有很大不同,“LIKE”将返回单词和短语的变体,而 FTS 不会。例如。`LIKE '%123456%'` 将返回包含 `"0123456"、"123456"、"1234567"` 等的结果。其中 `AGAINST('123456')` 只会返回单个单词的结果来*匹配*,例如如 `"is 123456"、"123456"、"123456 is"` 等,但*找不到*找到 `"0123456"` 或 `"1234567"`。示例:https://www.db-fiddle.com/f/5rJUTdDtV63RybnY4U9L2W/0 这就是为什么 FTS 可以在较大的数据集上执行得更快,因为它不会执行“LIKE”发生的全表扫描。 (2认同)

Amy*_*y B 6

SELECT * FROM items WHERE `items.xml` LIKE '%123456%'
Run Code Online (Sandbox Code Playgroud)

%在运营商LIKE的意思是"什么都可以在这里".


ryt*_*tis 6

你的意思是:

SELECT * FROM items WHERE items.xml LIKE '%123456%'
Run Code Online (Sandbox Code Playgroud)


sys*_*out 5

为什么不使用 LIKE?

SELECT * FROM items WHERE items.xml LIKE '%123456%'
Run Code Online (Sandbox Code Playgroud)