我对mysql在列中搜索文本的方式有一个问题。我有一个文本字符串要搜索,但是db返回了不同的字符串变体,特别是忽略了列数据中的连字符。举个例子:
搜索“%800fm%”及其返回的字符串为“800f-m”的数据我只想返回与搜索的字符串匹配的数据(即在这种情况下,不要忽略列值中的连字符)
我尝试了以下查询,但仍然使用连字符获取记录:
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列上启用了全文索引,但仍然没有得到所需的结果。
我意识到和对手的比赛在我缩进的时候是行不通的,但我想我应该用这些例子来展示我正在努力实现的目标。
有什么想法吗?
1条答案
按热度按时间htrmnn0y1#
如果你能给我们看看你的后台会很有用的。你可能应该用二进制。二进制使用位比较。
用法:
这也将强制区分大小写,这更准确。
请参见链接:https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html
如果没有帮助,给我看看你的数据,我也许可以重写一个更一致的查询。