MySQL的Json特性

Posted XuDing的音符

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的Json特性相关的知识,希望对你有一定的参考价值。

开发过程中难免会遇到在数据库里存储json字符串的情况,往往都是保存json一时爽,读取json愁死人。现在不用头疼了,MySQL自5.7.8开始就已经支持了json格式,可以在sql语句里直接解析json格式数据。


例如:

select adcm.ext->'$.data_id' as 问诊id, adcm.json_data->>'$.fromNick' as 发送人 from app_doctor_consult_message adcm

阅读mysql官方文档,发现MySQL对json的支持已经非常强大了,天然支持原生json类型,提供了强大的json函数,支持创建、查询、修改json数据,基本上所有json操作都可以在sql语句里完成。


上面sql里的 ext->'$.data_id' 和json_data->>'$.fromNick'5.7.9以后支持的简洁语法,分别代表 JSON_EXTRACTJSON_UNQUOTE 函数,JSON_EXTRACT 用于读取json字段的原始value内容,如果value是字符串(带有引号),那么读取的结果也包含引号,而 JSON_UNQUOTE 会去除引号,返回实际的value值。


 JSON_EXTRACT 和JSON_UNQUOTE 函数可以和 wherejoinupdate等语法配合使用,可以轻松实现很多以前需要写代码才能完成的工作。


在sql里提取json字段,查询效率肯定不如普通列,MySQL也考虑到了这个问题,提供了虚拟字段Generated Column,将虚拟字段绑定到json字段:

alter table app_doctor_consult_message add column data_id int(11generated always as (`ext` ->> '$.data_id');

如此我们可以像读取普通字段一样读取json字段了。当然还可以为虚拟字段创建索引,进一步提高查询性能。


需要注意的是,MySQL支持原生json类型,但是上述函数处理varchar类型的json文本依然有效,数据库执行时会自动作类型转换。但是建议以后设计数据库时,对于无法避免的json文本,直接使用json类型,毕竟现在不用偷摸存json了。很多查询分析器版本比较旧,表设计器里没有json类型选项,还是亲手写sql吧。


MySQL 5.7 官方文档:

https://dev.mysql.com/doc/refman/5.7/en/json.html https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

以上是关于MySQL的Json特性的主要内容,如果未能解决你的问题,请参考以下文章

MySQLMySQL 8 的 JSON 新特性详解JSON 函数

AE CC 里还原三维骨骼动画 | Json数据导入初尝试

MySQL里面的JSON特性

json 个人的vscode的代码片段

MySQLMySQL 8 的 JSON 新特性详解JSON 数据类型

实用代码片段将json数据绑定到html元素 (转)