使用LIKE的MySQL查询返回不完整的结果

时间:2016-12-13 17:07:55

标签: mysql sql-like

当我查询我的产品数据库时,我得到的结果不完整(包括PHP和PhPMyAdmin)。

产品表很大(159列,目前为8000行)。 一列包含产品标题/名称(VARCHAR 255)。

这些是一些产品:

  • Royal Club Wild Orange
  • 皇家俱乐部苦柠檬
  • Royal Club Ginger ale
  • Royal Club Tonic

在PhPMyAdmin中查询表格时使用:

SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%royal%'
ORDER BY `Product_omschrijving` ASC

我得到结果:

  • Royal Club Wild Orange

但不是其他产品...

在PhPMyAdmin中查询表格时使用:

SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%club%'
ORDER BY `Product_omschrijving` ASC

我得到结果:

  • Royal Club Wild Orange
  • 皇家俱乐部苦柠檬
  • Royal Club Ginger ale
  • Royal Club Tonic

在PhPMyAdmin中查询表格时使用:

SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%bitter%'
ORDER BY `Product_omschrijving` ASC

我得到的结果是: 没有产品...

有没有人知道可能是什么潜在问题?

我试图弄清楚发生了什么。 也许有关于数据库或列数的设置?

另外(2017年1月4日)

我还在预测搜索功能中使用此表(使用JQuery自动完成)。我在这里放了一个精简版:

http://www.personalbodycenter.nl/zzz_predictive_search.php

当您查看页面源时,您可以看到availableTags字段包含MySql表“Nevo_Nutrient_Gehaltes”中的所有产品。

现在,当您在字段中键入“royal”时,您在PhPMyAdmin中直接查询表时会得到相同的9(但不完整,应该有17个)。

当您在文本字段中键入“club”时,您将从表中获得所有值。你可以看到列表中有更多“皇家”的结果。当你输入“royal”时,这些也会出现!

如何通过mysql查询以及通过jquery函数获得相同的不完整结果?!我可能错了,但访问信息的这些不同方式不应该相关吗?

我已经在PhPMyAdmin中对表进行了大量实验,将表格减少到2列,更改了排序规则,更改了数据库引擎,但到目前为止还没有运气......

我已将数据库放在测试位置,所以如果有人觉得他们可以通过登录PhPMyAdmin来查看此表并看看这里发生了什么,我可以提供登录详细信息......

2 个答案:

答案 0 :(得分:1)

默认情况下,LIKE执行区分大小写的比较。也许你的列值有不同的情况。您可以尝试以下查询:

SELECT
    *
FROM
    Nevo_Nutrient_Gehaltes
WHERE
    lower(Product_omschrijving) LIKE '%royal%'
ORDER BY
    Product_omschrijving ASC

答案 1 :(得分:0)

经过大量的挖掘和实验,我发现这里的根本问题是mysql表中的隐藏字符。

主要是一个隐藏在数据分割词中的特定隐藏的“非破坏空间”字符(例如,当我使用utf8_encode对php中的字符串进行编码时,它显示:RoyÂal。

这些字符在PhPMyAdmin和预测搜索功能列表中是不可见的但是它们在那里(!),导致不完整的结果(例如LIKE'%Royal%'的查询丢弃了它们。)

我已发布follow up question here如何处理这些隐藏的字符。