问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql使用什么类型存 json数据

发布网友 发布时间:2022-04-22 07:46

我来回答

4个回答

热心网友 时间:2022-04-07 16:32

  JSON (JavaScriptObject Notation) 是一种轻量级的数据交换格式,主要用于传送数据。JSON采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写。对机器来说易于解析和生成,并且会减少网络带宽的传输。由于JSON格式可以解耦javascript客户端应用与Restful服务器端的方法调用,因而在互联网应用中被大量使用。
  JSON的格式非常简单:名称/键值。之前MySQL版本里面要实现这样的存储,要么用VARCHAR要么用TEXT大文本。 MySQL5.7发布后,专门设计了JSON数据类型以及关于这种类型的检索以及其他函数解析。我们先看看MySQL老版本的JSON存取。
  示例表结构:
  CREATE TABLE json_test(
  id INT,
  person_desc TEXT
  )ENGINE INNODB;
  我们来插入一条记录:
  INSERT INTO json_test VALUES (1,'{
  "programmers": [{
  "firstName": "Brett",
  "lastName": "McLaughlin",
  "email": "aaaa"
  }, {
  "firstName": "Jason",
  "lastName": "Hunter",
  "email": "bbbb"
  }, {
  "firstName": "Elliotte",
  "lastName": "Harold",
  "email": "cccc"
  }],
  "authors": [{
  "firstName": "Isaac",
  "lastName": "Asimov",
  "genre": "sciencefiction"
  }, {
  "firstName": "Tad",
  "lastName": "Williams",
  "genre":"fantasy"
  }, {
  "firstName": "Frank",
  "lastName": "Peretti",
  "genre": "christianfiction"
  }],
  "musicians": [{
  "firstName": "Eric",
  "lastName": "Clapton",
  "instrument": "guitar"
  }, {
  "firstName": "Sergei",
  "lastName": "Rachmaninoff",
  "instrument": "piano"
  }]
  }');
  那一般我们遇到这样来存储JSON格式的话,只能把这条记录取出来交个应用程序,由应用程序来解析。如此一来,JSON又和特定的应用程序耦合在一起,其便利性的优势大打折扣。
  现在到了MySQL5.7,可以支持对JSON进行属性的解析,我们重新修改下表结构:
  ALTER TABLE json_test MODIFY person_desc json;
  先看看插入的这行JSON数据有哪些KEY:
  mysql> SELECT id,json_keys(person_desc) as "keys" FROM json_test\G
  *************************** 1. row***************************
  id: 1
  keys: ["authors", "musicians","programmers"]
  1 row in set (0.00 sec)
  我们可以看到,里面有三个KEY,分别为authors,musicians,programmers。那现在找一个KEY把对应的值拿出来:
  mysql> SELECT json_extract(AUTHORS,'$.lastName[0]') AS 'name', AUTHORS FROM
  -> (
  -> SELECT id,json_extract(person_desc,'$.authors[0][0]') AS "authors" FROM json_test
  ->UNION ALL
  -> SELECT id,json_extract(person_desc,'$.authors[1][0]') AS "authors" FROM json_test
  -> UNION ALL
  -> SELECT id,json_extract(person_desc,'$.authors[2][0]') AS "authors" FROM json_test
  -> ) AS T1
  -> ORDER BY NAME DESC\G
  *************************** 1. row***************************
  name:"Williams"
  AUTHORS: {"genre": "fantasy","lastName": "Williams", "firstName":"Tad"}
  *************************** 2. row***************************
  name:"Peretti"
  AUTHORS: {"genre":"christianfiction", "lastName": "Peretti","firstName": "Frank"}
  *************************** 3. row***************************
  name:"Asimov"
  AUTHORS: {"genre": "sciencefiction","lastName": "Asimov", "firstName":"Isaac"}
  3 rows in set (0.00 sec)
  现在来把详细的值罗列出来:
  mysql> SELECT
  ->json_extract(AUTHORS,'$.firstName[0]') AS "firstname",
  -> json_extract(AUTHORS,'$.lastName[0]')AS "lastname",
  -> json_extract(AUTHORS,'$.genre[0]') AS"genre"
  -> FROM
  -> (
  -> SELECT id,json_extract(person_desc,'$.authors[0]')AS "authors" FROM json
  _test
  -> ) AS T\G
  *************************** 1. row***************************
  firstname: "Isaac"
  lastname:"Asimov"
  genre:"sciencefiction"
  1 row in set (0.00 sec)
  我们进一步来演示把authors 这个KEY对应的所有对象删掉。
  mysql> UPDATE json_test
  -> SET person_desc =json_remove(person_desc,'$.authors')\G
  Query OK, 1 row affected (0.01 sec)
  Rows matched: 1 Changed: 1 Warnings: 0
  查找下对应的KEY,发现已经被删除掉了。
  mysql> SELECT json_contains_path(person_desc,'all','$.authors')as authors_exists FROM json_test\G
  *************************** 1. row***************************
  authors_exists: 0
  1 row in set (0.00 sec)
  总结下,虽然MySQL5.7开始支持JSON数据类型,但是我建议如果要使用的话,最好是把这样的值取出来,然后在应用程序段来计算。毕竟数据库是用来处理结构化数据的,大量的未预先定义schema的json解析,会拖累数据库的性能。

热心网友 时间:2022-04-07 17:50

JSON (JavaScriptObject Notation) 是一种轻量级的数据交换格式,主要用于传送数据。JSON采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写。对机器来说易于解析和生成,并且会减少网络带宽的传输。由于JSON格式可以解耦javascript客户端应用与Restful服务器端的方法调用,因而在互联网应用中被大量使用。

JSON的格式非常简单:名称/键值。之前MySQL版本里面要实现这样的存储,要么用VARCHAR要么用TEXT大文本。 MySQL5.7发布后,专门设计了JSON数据类型以及关于这种类型的检索以及其他函数解析。我们先看看MySQL老版本的JSON存取。

示例表结构:

CREATE TABLE json_test(

id INT,

person_desc TEXT

)ENGINE INNODB;

我们来插入一条记录:

INSERT INTO json_test VALUES (1,'{

"programmers": [{

"firstName": "Brett",

"lastName": "McLaughlin",

"email": "aaaa"

}, {

"firstName": "Jason",

"lastName": "Hunter",

"email": "bbbb"

}, {

"firstName": "Elliotte",

"lastName": "Harold",

"email": "cccc"

}],

"authors": [{

"firstName": "Isaac",

"lastName": "Asimov",

"genre": "sciencefiction"

}, {

"firstName": "Tad",

"lastName": "Williams",

"genre":"fantasy"
}, {

"firstName": "Frank",

"lastName": "Peretti",

"genre": "christianfiction"

}],

"musicians": [{

"firstName": "Eric",

"lastName": "Clapton",

"instrument": "guitar"
}, {

"firstName": "Sergei",

"lastName": "Rachmaninoff",

"instrument": "piano"

}]

}');

那一般我们遇到这样来存储JSON格式的话,只能把这条记录取出来交个应用程序,由应用程

来解析。如此一来,JSON又和特定的应用程序耦合在一起,其便利性的优势大打折扣。

现在到了MySQL5.7,可以支持对JSON进行属性的解析,我们重新修改下表结构:

ALTER TABLE json_test MODIFY person_desc json;

先看看插入的这行JSON数据有哪些KEY:

mysql> SELECT id,json_keys(person_desc) as "keys" FROM json_test\G

*************************** 1. row***************************

id: 1

keys: ["authors", "musicians","programmers"]

1 row in set (0.00 sec)

我们可以看到,里面有三个KEY,分别为authors,musicians,programmers。那现在找一

KEY把对应的值拿出来:

mysql> SELECT json_extract(AUTHORS,'$.lastName[0]') AS 'name', AUTHORS FROM

-> (

-> SELECT id,json_extract(person_desc,'$.authors[0][0]') AS "authors" FROM json_test

->UNION ALL

-> SELECT id,json_extract(person_desc,'$.authors[1][0]') AS "authors" FROM json_test

-> UNION ALL

-> SELECT id,json_extract(person_desc,'$.authors[2][0]') AS "authors" FROM json_test

-> ) AS T1

-> ORDER BY NAME DESC\G

*************************** 1. row***************************

name:"Williams"

AUTHORS: {"genre": "fantasy","lastName": "Williams", "firstName":"Tad"}

*************************** 2. row***************************

name:"Peretti"

AUTHORS: {"genre":"christianfiction", "lastName": "Peretti","firstName":

"Frank"}*************************** 3. row***************************

name:"Asimov"

AUTHORS: {"genre": "sciencefiction","lastName": "Asimov", "firstName":"Isaac"}

3 rows in set (0.00 sec)

现在来把详细的值罗列出来:

mysql> SELECT

->json_extract(AUTHORS,'$.firstName[0]') AS "firstname",

-> json_extract(AUTHORS,'$.lastName[0]')AS "lastname",

-> json_extract(AUTHORS,'$.genre[0]') AS"genre"

-> FROM

-> (

-> SELECT id,json_extract(person_desc,'$.authors[0]')AS "authors" FROM json

_test

-> ) AS T\G

*************************** 1. row***************************

firstname: "Isaac"

lastname:"Asimov"

genre:"sciencefiction"

1 row in set (0.00 sec)

我们进一步来演示把authors 这个KEY对应的所有对象删掉。

mysql> UPDATE json_test

-> SET person_desc =json_remove(person_desc,'$.authors')\G

Query OK, 1 row affected (0.01 sec)

Rows matched: 1 Changed: 1  Warnings: 0

查找下对应的KEY,发现已经被删除掉了。

mysql> SELECT json_contains_path(person_desc,'all','$.authors')as authors_exists FROM

json_test\G

*************************** 1. row***************************

authors_exists: 0

1 row in set (0.00 sec)

总结下,虽然MySQL5.7开始支持JSON数据类型,但是我建议如果要使用的话,最好是把这的值取出来,然后在应用程序段来计算。毕竟数据库是用来处理结构化数据的,大量的未预先定义schema的json解析,会拖累数据库的性能。

热心网友 时间:2022-04-07 19:25

mysql使用什么类型存 json数据:

vchar ...

热心网友 时间:2022-04-07 21:16

我们知道,JSON是一种轻量级的数据交互的格式,大部分NO SQL数据库的存储都用JSON。MySQL从5.7开始支持JSON格式的数据存储,并且新增了很多JSON相关函数。MySQL 8.0 又带来了一个新的把JSON转换为TABLE的函数JSON_TABLE,实现了JSON到表的转换。


举例一

我们看下简单的例子:

简单定义一个两级JSON 对象

mysql> set @ytt='{"name":[{"a":"ytt","b":"action"},  {"a":"dble","b":"shard"},{"a":"mysql","b":"oracle"}]}';Query OK, 0 rows affected (0.00 sec)

第一级:

mysql> select json_keys(@ytt);+-----------------+| json_keys(@ytt) |+-----------------+| ["name"]        |+-----------------+1 row in set (0.00 sec)

第二级:

mysql> select json_keys(@ytt,'$.name[0]');+-----------------------------+| json_keys(@ytt,'$.name[0]') |+-----------------------------+| ["a", "b"]                  |+-----------------------------+1 row in set (0.00 sec)

我们使用MySQL 8.0 的JSON_TABLE 来转换 @ytt。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
医生你好 我脸上跟额头上面长了很多小粉刺 请问这是什么原因引起的 要... 世界上到底是先有的鸡还是先有的蛋 请问是先有蛋,还是先有鸡? Excel怎么设置行高并且垂直 晚上梦见一条又长又小的青蛇追着咬我最后被我爸爸打死了代表什么... 专业技能怎么填我来教你 QQ空间曾经有一个左右接东西 小游戏叫什么名字 帽子先生接东西游戏介绍 趣味卡车接东西游戏介绍 怀孕50天B超的表现 老年人的身体变化体现在哪些方面? 如何将从api接口获取的json数据导入到MySQL中呢? 如何将 JSON,Text,XML,CSV 数据文件导入 MySQL 怎么在mysql中放入json数据 短视频如何挣钱? 拍短视频是怎么赚钱的 短视频变现都有那些方法? 如何使用nginx实现重要请求使用https,其他使用http 使用nginx提供网站后台的web接口,经常出现访问出... 使用nginx反向代理,每秒钟都有数据吞吐,15分钟后... 如何使用nginx给服务器配置多个web 使用nginx代理服务器提示dns错误 如何使用nginx解决跨域请求问题 QQ阅读中已经被加书架的书,怎么才能让它们下架,亲们 龙族漫画停更了吗 QQ阅读锦绣未央怎么下架了 为什么在qq阅读里我的书城那的六个漫画给不见了?该... qq阅读上的书下架了是不是就不收钱了 为什么qq阅读魔王进化史不能看了 系统更新后三星s9+为什么使用过程中总是死机? 老年人身体有哪些症状时,需警惕老年痴呆症? 老年人保持身体健康该怎么做? 老年人身体机能的特点 生活中老年人身体是否健康,具体有什么标准呢? 老年人身上为什么会出现臭味? 形容老年人身的词语 梦见祭拜已故母亲磕头四个且很伤心? 梦见去给已过世的妈妈祭拜的时候妈妈出现在眼前了... 老年人身体健康方法有哪些? 老年人怎样保养身体 不到上坟时节,总是做梦梦到去世的母亲,可不可以去... 老年人有哪几个特征,说明身体很硬朗? 梦见去世母亲停放在寺庙里,去祭拜的时候突然从床... 周公解梦:梦见已故母亲与我一起祭拜祖坟 老年人如何保持健康身体状态? 梦见自己去已故母亲祖坟祭祖刮风大哭怎样? 怎么样可以提高老年人的身体素质? 老年人身心变化的特点 我有两个在读大专,一个是全日制的,一个是成人的... 经常会梦到去世的妈妈是什么意思?