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

Posted

技术标签:

【中文标题】在 MySQL 的文本列中搜索字符串【英文标题】:Search for string within text column in MySQL 【发布时间】:2021-05-21 17:42:43 【问题描述】:

我有一个 mysql 表,其中有一列将 xml 存储为字符串。我需要找到 xml 列包含给定 6 个字符的字符串的所有元组。其他都不重要——我只需要知道这 6 个字符串是否存在。

因此,文本格式是否为 xml 可能并不重要。

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

有没有办法可以使用 LIKE 运算符来做到这一点?

【问题讨论】:

参考这个:winashwin.wordpress.com/2012/08/28/mysql-search 【参考方案1】:

您可能可以使用LIKE clause 进行一些简单的字符串匹配:

SELECT * FROM items WHERE items.xml LIKE '%123456%'

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

【讨论】:

.. 我将如何修改它以与 php 查询一起使用?我有一个字符串$message,我想选择具有该确切字符串的行。我有SELECT * FROM Messages WHERE from_id = '$fromID' AND to_id = '$toID' AND message LIKE '$message',但我认为这行不通 如果123456是字符串的开头,那么它就不起作用了。 timothymarois - % 匹配零个或多个字符,因此如果所需字符串位于您正在搜索的内容的开头、结尾或中间,它将起作用。请参阅:w3schools.com/sql/sql_like.asp跨度> 你也应该escape it。【参考方案2】:

使用like 可能需要更长的时间,所以使用full_text_search

SELECT * FROM items WHERE MATCH(items.xml) AGAINST ('your_search_word')

【讨论】:

这是否被证明比 LIKE 更快? 重要的是要注意,要使其工作,需要在目标列上有FULLTEXT 索引。 为了进一步扩展,FTS 与LIKE 有很大不同,LIKE 将返回单词和短语的变体,而 FTS 不会。例如。 LIKE '%123456%' 将返回带有"0123456", "123456", "1234567" 等的结果。其中AGAINST('123456') 将只返回作为单个词的结果以匹配,例如"is 123456", "123456", "123456 is" 等,但找到"0123456""1234567"。示例:db-fiddle.com/f/5rJUTdDtV63RybnY4U9L2W/0 这就是 FTS 可以在更大的数据集上执行得更快的原因,因为它不会像 LIKE 那样执行全表扫描。【参考方案3】:
SELECT * FROM items WHERE `items.xml` LIKE '%123456%'

LIKE 中的 % 运算符表示“任何东西都可以在这里”。

【讨论】:

【参考方案4】:

为什么不使用 LIKE?

SELECT * FROM items WHERE items.xml LIKE '%123456%'

【讨论】:

【参考方案5】:

你的意思是:

SELECT * FROM items WHERE items.xml LIKE '%123456%'

【讨论】:

【参考方案6】:

当您使用 wordpress 准备行时,上述解决方案不起作用。这是我使用的解决方案:

   $Table_Name    = $wpdb->prefix.'tablename';
   $SearchField = '%'. $YourVariable . '%';   
   $sql_query     = $wpdb->prepare("SELECT * FROM $Table_Name WHERE ColumnName LIKE %s", $SearchField) ;
 $rows = $wpdb->get_results($sql_query, ARRAY_A);

【讨论】:

以上是关于在 MySQL 的文本列中搜索字符串的主要内容,如果未能解决你的问题,请参考以下文章

搜索 HTML 存储内容 PHP/MySQL 时忽略 HTML 字符?

SQL Server 在列中搜索文本

在 MySQL 的 BLOB 列中搜索值

在 MySQL 中的表的多个列中查找连接的字符串

VBA 查找/替换和文本颜色更改

使用正则表达式从 mysql 列中提取子字符串