MySQL在版本5.7.8中引入了JavaScript Object Notation(JSON)数据类型,从而可以更有效地访问JSON编码的数据。在幕后,MySQL会将存储在JSON列中的JSON文档转换为允许快速读取对文档元素的内部格式。这样可以避免服务器从文本表示形式转换JSON值以读取它们。另一个好处是,二进制格式的结构使得可以直接通过键或数组索引检索子对象,而无需读取文档中的所有值。
为了演示如何在MySQL中查询JSON列,我在数据库开发和管理客户端Navicat for MySQL中创建了一个表包含产品数据。该表的最后一列- 属性-使用新的json 数据类型:
![eb596bb9e6f7e0a0f1da1c1c821a2cb3.png](https://i-blog.csdnimg.cn/blog_migrate/2bbbb8b940d14ab186e2ac132871f219.jpeg)
这是表的内容:
![84fdbcc30cc513cb8496a6ff991f390d.png](https://i-blog.csdnimg.cn/blog_migrate/9889a108c625821548ae3e9b6082fec4.jpeg)
从数据类型下拉列表中选择文本,将在屏幕底部打开一个编辑器,其中包括语法突出显示和JSON格式。
JSON查询示例
与大多数其他数据类型相比,查询JSON列要稍微复杂一些,因为JSON文档可以表示多种数据类型。因此,MySQL提供了几个有用的JSON函数来简化该过程。
例如,我们可以使用JSON_EXTRACT()函数来显示具有端口的产品。JSON_EXTRACT()接受JSON字符串和JSON路径表达式作为参数,并从JSON文档返回数据。美元符号($)引用文档根,而句点(。)表示对象级别。
语法如下:
JSON_EXTRACT(json_doc,path [,path] ...)
json_docJSON文档在哪里,是path要返回的值的路径。
以下查询返回ports属性:
![d9c8ec780d8c388bb93f418d36965b9c.png](https://i-blog.csdnimg.cn/blog_migrate/2fd3a168c3fe38656fc064089259c71c.jpeg)
如果要删除具有空值的行,则只需添加WHERE子句,如下所示:
![24fee80da7f5be7221be93b4bf148965.png](https://i-blog.csdnimg.cn/blog_migrate/85497b59f7f2ca80eac24367a9bfc4fb.jpeg)
使用JSON_SEARCH()
另一个有用的函数是JSON_SEARCH()。它返回JSON文档中给定字符串的路径,并接受一堆输入参数:
JSON_SEARCH(json_doc,one_or_all,search_str [,escape_char [,path] ...])
是否想找到带有50英寸屏幕的显示器?这是执行此操作的查询:
![c2071c79f9a16a048191cc98eee1c87d.png](https://i-blog.csdnimg.cn/blog_migrate/5e82c78f7c2116064e5d4f96fb40ade5.jpeg)
试试这些功能之一。如果它们对您不起作用,请查看MySQL文档。还有许多其他JSON函数!