繁体   English   中英

为什么 MySQL REGEXP [:space:] 与根本不在数据中的字符匹配

[英]Why MySQL REGEXP [:space:] match with character that are not in the data at all

我的查询中有这个条件

SELECT r.roomid as room_id, up.name as partner_name, up.avatar as partner_avatar, m.message as last_partner_message, ...
...
WHERE uo.id = "${ownerId}"
AND ( (up.name = "" OR up.name IS NULL) 
OR ( up.name LIKE "${keyword}%" 
OR up.name REGEXP "[:space:]${keyword}*" )

语境:

  • up = 用户伙伴,uo = 用户所有者。
  • ${value} 是字符串文字中的 javascript 变量

当我将keyword作为z插入时,它显示的结果如下:

"data": [
    {
      "room_id": "Nngdys/v2EDHAY4V",
      "partner_name": "Mai Toyota", /* please take a look at every partner_name value */
      "partner_avatar": "example_url_image.com",
      "last_partner_message": null,
      "last_chat_minute": null
    },
    {
      "room_id": "7GEf2kRUYgLrpgzD",
      "partner_name": "Georgmain Lo",
      "partner_avatar": "example_url_image.com",
      "last_partner_message": null,
      "last_chat_minute": null
    },
    {
      "room_id": "9Ji1w+mgvMRy9BzH",
      "partner_name": "Toyota Mai",
      "partner_avatar": "example_url_image.com",
      "last_partner_message": null,
      "last_chat_minute": null
    },
    {
      "room_id": "ISkm3GYz7oDu4x5w",
      "partner_name": "Georgmain Lo",
      "partner_avatar": "example_url_image.com",
      "last_partner_message": null,
      "last_chat_minute": null
    },
    {
      "room_id": "CmY9HDG8YuadjwvN",
      "partner_name": "Georgmain Lo",
      "partner_avatar": "example_url_image.com",
      "last_partner_message": null,
      "last_chat_minute": null
    }
  ]

如您所见, partner_name值中甚至没有z 原来这个结果发生在keyword中的每个字符输入。 但是,如果我插入两个或更多字符,那就很好了。

我不明白为什么。

更新:

问题似乎在 REGEXP here 中。 看看这个在此处输入图像描述

[:space:]${single_char}*将匹配其中有空格的每个值。

这是小提琴: http://sqlfiddle.com/#!9/217a49/2

评论作为答案:

请注意, *表示零个或多个匹配项。 +表示一个或多个。 您可能想改用[[:space:]]s+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM