当我查询我的产品数据库时,我得到的结果不完整(包括PHP和PhPMyAdmin)。
产品表很大(159列,目前为8000行)。 一列包含产品标题/名称(VARCHAR 255)。
这些是一些产品:
在PhPMyAdmin中查询表格时使用:
SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%royal%'
ORDER BY `Product_omschrijving` ASC
我得到结果:
但不是其他产品...
在PhPMyAdmin中查询表格时使用:
SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%club%'
ORDER BY `Product_omschrijving` ASC
我得到结果:
在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来查看此表并看看这里发生了什么,我可以提供登录详细信息......
答案 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如何处理这些隐藏的字符。