MySQL LIKE 查询 returns 不完整的结果
MySQL query with LIKE returns incomplete results
当我查询我的产品数据库时,我得到的结果不完整(在 PHP 和 PhPMyAdmin 中)。
产品 table 很大(159 列,目前有 8000 行)。
一列包含产品 title/name (VARCHAR 255).
这些是一些产品:
- 皇家具乐部野橙
- 皇家具乐部苦柠檬
- 皇家具乐部姜汁汽水
- 皇家具乐部补品
在 PhPMyAdmin 中,当我查询 table 时:
SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%royal%'
ORDER BY `Product_omschrijving` ASC
我得到的结果是:
- 皇家具乐部野橙
但不是其他产品...
在 PhPMyAdmin 中,当我查询 table 时:
SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%club%'
ORDER BY `Product_omschrijving` ASC
我得到的结果是:
- 皇家具乐部野橙
- 皇家具乐部苦柠檬
- 皇家具乐部姜汁汽水
- 皇家具乐部补品
在 PhPMyAdmin 中,当我查询 table 时:
SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%bitter%'
ORDER BY `Product_omschrijving` ASC
我得到的结果是:
没有产品...
有谁知道潜在的问题是什么?
我想弄清楚发生了什么。
也许与数据库设置或列数有关?
添加(2017 年 1 月 4 日)
我还在预测搜索功能中使用了这个 table(具有 JQuery 自动完成功能)。我在这里放了一个精简版:
http://www.personalbodycenter.nl/zzz_predictive_search.php
当您查看页面源代码时,您可以看到 availableTags 字段包含 MySql table "Nevo_Nutrient_Gehaltes".
中的所有产品
现在,当您在字段中键入 "royal" 时,您会得到与直接在 PhPMyAdmin 中查询 table 时相同的 9 个(但不完整,应该有 17 个)结果。
当您在文本字段中键入 "club" 时,您会从 table 中获得应有的所有值。并且您可以看到列表中有更多带有 "royal" 的结果。当您键入 "royal"!
时,这些也应该出现
如何通过 mysql 查询和 jquery 函数得出相同的不完整结果?!我可能是错的,但这些不同的信息访问方式应该没有关联?
我已经在 PhPMyAdmin 中对 table 进行了大量试验,方法是将 table 减少到 2 列,更改排序规则,更改数据库引擎,但到目前为止运气不佳...
我已将数据库放在测试位置,所以如果有人觉得他们可以通过登录 PhPMyAdmin 来帮助我查看此 table 并了解这里发生了什么,我可以提供登录详细信息。 ..
默认情况下,LIKE
执行区分大小写的比较。也许您的列值有不同的大小写。你能试试下面的查询吗:
SELECT
*
FROM
Nevo_Nutrient_Gehaltes
WHERE
lower(Product_omschrijving) LIKE '%royal%'
ORDER BY
Product_omschrijving ASC
经过大量的挖掘和试验,我发现这里的根本问题是 mysql table 中的隐藏字符。
主要是一个特定的隐藏 "non breaking space" 字符在数据拆分词中蔓延(例如,当我使用 utf8_encode 对 php 中的字符串进行编码时,它显示:RoyÂal。
这些字符在 PhPMyAdmin 和预测搜索功能列表中是不可见的)但它们在那里(!),导致结果不完整(例如,带有 LIKE '%Royal%' 的查询丢弃了它们)。
我已经发布了follow up question here如何处理这些隐藏字符。
当我查询我的产品数据库时,我得到的结果不完整(在 PHP 和 PhPMyAdmin 中)。
产品 table 很大(159 列,目前有 8000 行)。 一列包含产品 title/name (VARCHAR 255).
这些是一些产品:
- 皇家具乐部野橙
- 皇家具乐部苦柠檬
- 皇家具乐部姜汁汽水
- 皇家具乐部补品
在 PhPMyAdmin 中,当我查询 table 时:
SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%royal%'
ORDER BY `Product_omschrijving` ASC
我得到的结果是:
- 皇家具乐部野橙
但不是其他产品...
在 PhPMyAdmin 中,当我查询 table 时:
SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%club%'
ORDER BY `Product_omschrijving` ASC
我得到的结果是:
- 皇家具乐部野橙
- 皇家具乐部苦柠檬
- 皇家具乐部姜汁汽水
- 皇家具乐部补品
在 PhPMyAdmin 中,当我查询 table 时:
SELECT * FROM `Nevo_Nutrient_Gehaltes`
WHERE `Product_omschrijving` LIKE '%bitter%'
ORDER BY `Product_omschrijving` ASC
我得到的结果是: 没有产品...
有谁知道潜在的问题是什么?
我想弄清楚发生了什么。 也许与数据库设置或列数有关?
添加(2017 年 1 月 4 日)
我还在预测搜索功能中使用了这个 table(具有 JQuery 自动完成功能)。我在这里放了一个精简版:
http://www.personalbodycenter.nl/zzz_predictive_search.php
当您查看页面源代码时,您可以看到 availableTags 字段包含 MySql table "Nevo_Nutrient_Gehaltes".
中的所有产品现在,当您在字段中键入 "royal" 时,您会得到与直接在 PhPMyAdmin 中查询 table 时相同的 9 个(但不完整,应该有 17 个)结果。
当您在文本字段中键入 "club" 时,您会从 table 中获得应有的所有值。并且您可以看到列表中有更多带有 "royal" 的结果。当您键入 "royal"!
时,这些也应该出现如何通过 mysql 查询和 jquery 函数得出相同的不完整结果?!我可能是错的,但这些不同的信息访问方式应该没有关联?
我已经在 PhPMyAdmin 中对 table 进行了大量试验,方法是将 table 减少到 2 列,更改排序规则,更改数据库引擎,但到目前为止运气不佳...
我已将数据库放在测试位置,所以如果有人觉得他们可以通过登录 PhPMyAdmin 来帮助我查看此 table 并了解这里发生了什么,我可以提供登录详细信息。 ..
默认情况下,LIKE
执行区分大小写的比较。也许您的列值有不同的大小写。你能试试下面的查询吗:
SELECT
*
FROM
Nevo_Nutrient_Gehaltes
WHERE
lower(Product_omschrijving) LIKE '%royal%'
ORDER BY
Product_omschrijving ASC
经过大量的挖掘和试验,我发现这里的根本问题是 mysql table 中的隐藏字符。
主要是一个特定的隐藏 "non breaking space" 字符在数据拆分词中蔓延(例如,当我使用 utf8_encode 对 php 中的字符串进行编码时,它显示:RoyÂal。
这些字符在 PhPMyAdmin 和预测搜索功能列表中是不可见的)但它们在那里(!),导致结果不完整(例如,带有 LIKE '%Royal%' 的查询丢弃了它们)。
我已经发布了follow up question here如何处理这些隐藏字符。