我对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 索引,但仍未获得所需的结果。
我认识到匹配不会随着我的缩进而起作用,但我认为我将展示这些示例来说明我要实现的目标。
有什么想法吗?
答案 0 :(得分:0)
如果您可以向我们展示您的后端,将非常有用。您可能应该使用LIKE BINARY。二进制使用位比较。
用法:
SELECT *
FROM people
WHERE name LIKE BINARY '%abc%' ;
这还将强制区分大小写,这更加准确。
查看链接:https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html
如果没有帮助,请向我显示您的数据,我也许可以重写更一致的查询。