表内某字段的类型是 json,要往该字段上面存储一段比较大的内容( PS:txt 文件显示是 120k ),然后发现该字段无法存储,将 max_allowed_packet 参数直接调成 1G 也没用,无奈只能将该字段转成 longText 类型,顺利保存。
查阅了 mysql 的官方文档,都说 json 类型的存储和 longText 类似,但是受限于 max_allowed_packet 的值,可是我怎么调参都没用,有没有解决办法?
[{"bg":"660","ed":"1550","onebest":"喂喂喂喂喂","speaker":"1"},{"bg":"660","ed":"1550","onebest":"hello,hello,hello,hellonhello","speaker":"2"}...]
比如我使用 Navicat 修改行数据,直接在这个字段内粘贴内容的时候,粘贴的内容会被截掉,如下图:
1
saulshao 2019-03-07 17:33:57 +08:00
你这不像是长度受限...能把错误提示贴出来看一下不?
|
2
BBCCBB 2019-03-07 17:44:51 +08:00
你存的文本的格式不是 json?
|
3
GoldenJet OP @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 |
4
GoldenJet OP @saulshao 比如我直接使用 Navicat 修改行数据,这个字段粘贴内容的时候,直接就给我把数据截掉了,
http://blogsource.chenkaikai.com/mysqlJson.png |
5
BBCCBB 2019-03-07 18:15:56 +08:00
存不进去的时候有报错提示吗?
|
6
saulshao 2019-03-07 18:19:31 +08:00
你说的症状很可能是 navicat 自己的问题。我建议用代码试试看。读一下返回的错误提示就大概能明白是怎么回事了。
|
7
GoldenJet OP @saulshao 应该不是 Navicat 的问题,这个问题是在生产环境发生的,生产环境是使用的 jdbc 进行操作的数据库。
今天生产环境的数据出现了问题,最后排查下来发现有个字段是使用的 json 类型,其中有两行数据比较大,在数据库中的数据是直接被截断调的,而其他的数据都不大,是被正常存储的。 |
8
GoldenJet OP @BBCCBB 没有错误提示诶,我在本地又重现了一下,
``` String data = resultMsg.getData(); // 数据获取 System.out.println(data); // 控制台打印 VoiceText voiceText = voiceTextRepository.findOne(3L); // 数据库获取行数据 voiceText.setDialog(data); // 行内字段赋值 voiceTextRepository.save(voiceText); // save ``` 然后发现:① 没有错误信息,② 控制台打印的数据是完整的,③ 数据库中存储的数据是被截取过的 |
9
BBCCBB 2019-03-07 18:57:16 +08:00
你再用代码查出来再打印看一下呢, 你通过 navicat 查看显示被截断的话有可能是 navicat 限制过显示的最长长度..
|