mysql json 类型的字段最大支持多大容量?

2019-03-07 17:05:35 +08:00
 GoldenJet

环境:

  1. win 10
  2. mysql 版本:5.7.19
  3. 字段类型:json
  4. max_allowed_packet 参数:1024M

问题:

  1. 表内某字段的类型是 json,要往该字段上面存储一段比较大的内容( PS:txt 文件显示是 120k ),然后发现该字段无法存储,将 max_allowed_packet 参数直接调成 1G 也没用,无奈只能将该字段转成 longText 类型,顺利保存。

  2. 查阅了 mysql 的官方文档,都说 json 类型的存储和 longText 类似,但是受限于 max_allowed_packet 的值,可是我怎么调参都没用,有没有解决办法?

9444 次点击
所在节点    MySQL
10 条回复
saulshao
2019-03-07 17:33:57 +08:00
你这不像是长度受限...能把错误提示贴出来看一下不?
BBCCBB
2019-03-07 17:44:51 +08:00
你存的文本的格式不是 json?
GoldenJet
2019-03-07 18:10:09 +08:00
@BBCCBB 是标准的 json,内容大概长这样:
[{"bg":"660","ed":"1550","onebest":"喂喂喂喂喂","speaker":"1"},{"bg":"660","ed":"1550","onebest":"hello,hello,hello,hellonhello","speaker":"2"}.....],
内容太长我就传个七牛云的文件地址吧: http://blogsource.chenkaikai.com/jsonTemp.txt
GoldenJet
2019-03-07 18:15:44 +08:00
@saulshao 比如我直接使用 Navicat 修改行数据,这个字段粘贴内容的时候,直接就给我把数据截掉了,
http://blogsource.chenkaikai.com/mysqlJson.png
BBCCBB
2019-03-07 18:15:56 +08:00
存不进去的时候有报错提示吗?
saulshao
2019-03-07 18:19:31 +08:00
你说的症状很可能是 navicat 自己的问题。我建议用代码试试看。读一下返回的错误提示就大概能明白是怎么回事了。
GoldenJet
2019-03-07 18:29:14 +08:00
@saulshao 应该不是 Navicat 的问题,这个问题是在生产环境发生的,生产环境是使用的 jdbc 进行操作的数据库。
今天生产环境的数据出现了问题,最后排查下来发现有个字段是使用的 json 类型,其中有两行数据比较大,在数据库中的数据是直接被截断调的,而其他的数据都不大,是被正常存储的。
GoldenJet
2019-03-07 18:50:59 +08:00
@BBCCBB 没有错误提示诶,我在本地又重现了一下,
```
String data = resultMsg.getData(); // 数据获取
System.out.println(data); // 控制台打印
VoiceText voiceText = voiceTextRepository.findOne(3L); // 数据库获取行数据
voiceText.setDialog(data); // 行内字段赋值
voiceTextRepository.save(voiceText); // save
```
然后发现:① 没有错误信息,② 控制台打印的数据是完整的,③ 数据库中存储的数据是被截取过的
BBCCBB
2019-03-07 18:57:16 +08:00
你再用代码查出来再打印看一下呢, 你通过 navicat 查看显示被截断的话有可能是 navicat 限制过显示的最长长度..
GoldenJet
2019-03-07 21:16:49 +08:00
@BBCCBB
@saulshao
THX,确实是 Navicat 的原因,哎,找问题的方向找错了,尴尬。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/542211

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX