MySQL正则表达式搜索JSON数组

MySQL正则表达式搜索JSON数组,mysql,regex,Mysql,Regex,我正在将json数据存储到表中的一个字段中,在使用REGEXP返回正确的条目时遇到问题 基本上,它与JSON对象中的其他属性相匹配,这是不应该的 示例JSON { "data": { "en": { "containers": [ { "id": 1441530944931, "template": "12", "columns": { "column1": [

我正在将json数据存储到表中的一个字段中,在使用REGEXP返回正确的条目时遇到问题 基本上,它与JSON对象中的其他属性相匹配,这是不应该的

示例JSON

    {
  "data": {
    "en": {
      "containers": [
        {
          "id": 1441530944931,
          "template": "12",
          "columns": {
            "column1": [
              "144",
              "145",
              "148"
            ],
            "column2":[
                "135",
                "148",
                "234"
            ]
          }
        }
      ],
      "left": "152",
      "right": "151"
    },

  }
}
现在,我想根据一个特定的值(即148)搜索columns数组

现在我有下面的问题

WHERE (w.`_attrs` REGEXP '"column[0-9]":.*\\[.*"148".*\\]'
这很好用 但是,如果我将值从148更改为152或151,它也可以工作 出于某种原因,查询也匹配属性leftright,但这是不可取的

有什么帮助吗


谢谢

或者。。。切换到MariaDB 10并为JSON的组件编制索引。

您的意思是,根据给定的样本数据,如果您在
152
上进行匹配,它将返回正值?正确。它也将匹配151。基本上,它将匹配任何键,该键的值用“”括起来,就好像它完全跳过了“列[0-9]”:。部分您的通配符
*
需要显式排除方括号,例如
[^\\[]*
。但我忍不住觉得您在这里做出了一些糟糕的设计决策,因为这个过滤器不适合使用……如果您要使用关系数据库,为什么不存储关系数据(即,将此JSON标准化!);否则,文档存储(NoSQL)数据库可能更合适?@Thomas:这只会让它听起来更不适合RDBMS。看看一些基于文档的NoSQL数据库(例如MongoDB)是如何处理JSON的。整个内容将被索引并易于搜索,而不依赖于易出错(而且速度非常慢)基于模式的字符串匹配。