MySQL返回错误的搜索记录

时间:2018-06-27 09:11:51

标签: mysql

我对MySQL在列中搜索文本的方式有疑问。我有一个要搜索的文本字符串,但是数据库返回的是字符串的不同变体,特别是忽略了列数据中的连字符。一个例子:

使用字符串'800F-M'搜索'%800fm%'及其返回数据我只想返回与搜索到的字符串匹配的数据(即在这种情况下,请不要忽略列值中的连字符)

我已经尝试了以下查询,但是我仍然保持带连字符的记录:

SELECT p.partNo,
       p.stripedPartNo,
       p.ID AS partId,
       m.manufacturerName,
       concat(m.manufacturerName, ' ', p.partNo) AS fullPartName,
       1 AS `order`
FROM parts p
JOIN manufacturers m ON m.ID = p.manufacturerID
JOIN partSearchCache pc ON pc.partID = p.id
WHERE MATCH (pc.partName) AGAINST ('800FM')
  AND p.managerApproved = 1
LIMIT 100

    SELECT p.partNo,
           p.stripedPartNo,
           p.ID AS partId,
           m.manufacturerName,
           concat(m.manufacturerName, ' ', p.partNo) AS fullPartName,
           1 AS `order`
    FROM parts p
    JOIN manufacturers m ON m.ID = p.manufacturerID
    JOIN partSearchCache pc ON pc.partID = p.id
    WHERE MATCH (pc.partName) AGAINST ('%800FM%')
      AND p.managerApproved = 1
    LIMIT 100

SELECT p.partNo,
       p.stripedPartNo,
       p.ID AS partId,
       m.manufacturerName,
       concat(m.manufacturerName, ' ', p.partNo) AS fullPartName,
       1 AS `order`
FROM parts p
JOIN manufacturers m ON m.ID = p.manufacturerID
JOIN partSearchCache pc ON pc.partID = p.id
WHERE pc.partName LIKE '%800FM%'
  AND p.managerApproved = 1
LIMIT 100

我已在 pc.partName 列上启用了 FULLTEXT 索引,但仍未获得所需的结果。

我认识到匹配不会随着我的缩进而起作用,但我认为我将展示这些示例来说明我要实现的目标。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您可以向我们展示您的后端,将非常有用。您可能应该使用LIKE BINARY。二进制使用位比较。

用法:

SELECT * 
FROM people 
WHERE name LIKE BINARY '%abc%' ;

这还将强制区分大小写,这更加准确。

查看链接:https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html

如果没有帮助,请向我显示您的数据,我也许可以重写更一致的查询。