› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
GoldenJet
V2EX  ›  MySQL

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

  •  
  •   GoldenJet ·
    goldenJet · Mar 7, 2019 · 10416 views
    This topic created in 2789 days ago, the information mentioned may be changed or developed.

    环境:

    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 的值,可是我怎么调参都没用,有没有解决办法?

    Supplement 1  ·  Mar 7, 2019

    内容是标准的 json,类似

    [{"bg":"660","ed":"1550","onebest":"喂喂喂喂喂","speaker":"1"},{"bg":"660","ed":"1550","onebest":"hello,hello,hello,hellonhello","speaker":"2"}...]
    

    错误:

    比如我使用 Navicat 修改行数据,直接在这个字段内粘贴内容的时候,粘贴的内容会被截掉,如下图:

    10 replies  •  2019-03-07 21:16:49 +08:00
    saulshao
        1
    saulshao  
       Mar 7, 2019
    你这不像是长度受限...能把错误提示贴出来看一下不?
    BBCCBB
        2
    BBCCBB  
       Mar 7, 2019
    你存的文本的格式不是 json?
    GoldenJet
        3
    GoldenJet  
    OP
       Mar 7, 2019
    @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
        4
    GoldenJet  
    OP
       Mar 7, 2019
    @saulshao 比如我直接使用 Navicat 修改行数据,这个字段粘贴内容的时候,直接就给我把数据截掉了,
    http://blogsource.chenkaikai.com/mysqlJson.png
    BBCCBB
        5
    BBCCBB  
       Mar 7, 2019
    存不进去的时候有报错提示吗?
    saulshao
        6
    saulshao  
       Mar 7, 2019
    你说的症状很可能是 navicat 自己的问题。我建议用代码试试看。读一下返回的错误提示就大概能明白是怎么回事了。
    GoldenJet
        7
    GoldenJet  
    OP
       Mar 7, 2019
    @saulshao 应该不是 Navicat 的问题,这个问题是在生产环境发生的,生产环境是使用的 jdbc 进行操作的数据库。
    今天生产环境的数据出现了问题,最后排查下来发现有个字段是使用的 json 类型,其中有两行数据比较大,在数据库中的数据是直接被截断调的,而其他的数据都不大,是被正常存储的。
    GoldenJet
        8
    GoldenJet  
    OP
       Mar 7, 2019
    @BBCCBB 没有错误提示诶,我在本地又重现了一下,
    ```
    String data = resultMsg.getData(); // 数据获取
    System.out.println(data); // 控制台打印
    VoiceText voiceText = voiceTextRepository.findOne(3L); // 数据库获取行数据
    voiceText.setDialog(data); // 行内字段赋值
    voiceTextRepository.save(voiceText); // save
    ```
    然后发现:① 没有错误信息,② 控制台打印的数据是完整的,③ 数据库中存储的数据是被截取过的
    BBCCBB
        9
    BBCCBB  
       Mar 7, 2019
    你再用代码查出来再打印看一下呢, 你通过 navicat 查看显示被截断的话有可能是 navicat 限制过显示的最长长度..
    GoldenJet
        10
    GoldenJet  
    OP
       Mar 7, 2019
    @BBCCBB
    @saulshao
    THX,确实是 Navicat 的原因,哎,找问题的方向找错了,尴尬。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2446 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:08 · PVG 19:08 · LAX 04:08 · JFK 07:08
    ♥ Do have faith in what you're doing.