zoukankan      html  css  js  c++  java
  • mysql: Packet for query is too large 和Data too long for column

    今天在用mysql开发项目的时候,用BLOB字段存储文件二进制流。


    一、先是报异常

    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'title' at row 1

    发现上传的文件大于65535字符(mysql在UTF-8编码下汉字也是一个字符,跟oracle一个汉字3个字符不一样)

    用 show full fields from table_name; 查询的collation字段可以看到当前表的字符集。


    一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。(0.06 M兆)

    MEDIUMBLOB 
    MEDIUMTEXT 
    一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。 (16M)

    LONGBLOB 
    LONGTEXT 
    一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。(4G)


                         最后修改为LONGBLOB 解决第一个问题。


    二、max_allowed_packet设置及问题

    报的异常:com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1521830 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable

    mysql根据配置文件会限制server接受的数据包大小。
    有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败。
    根据show VARIABLES like '%max_allowed_packet%'; 查询value值(字节)

    解决方法,在my.ini里的[mysqld]增加如下部分 
    [mysqld] 
    max_allowed_packet=64M

    注意,在[client]和[mysql]部分增加无效,那个是客户端读取的参数。

    然后一定记住重启MYSQL服务(不是终端),使用net stop mysql + net start mysql  或者 cmd->services.msc重启MYSQL服务,这里仅限于Windows




    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Nodejs exec和spawn的区别
    VC++每个版本对应的库
    在cmd启动一个win32程序,printf把信息输出到启运它的那个CMD窗口
    window 控制台解决中文乱码
    NW.js 桌面应用程序
    C++ Addon Async 异步机制
    Node bak
    nodejs electron 创建桌面应用
    跨平台桌面程序框架Electron
    js post 下载文件
  • 原文地址:https://www.cnblogs.com/cuker919/p/4878505.html
Copyright © 2011-2022 走看看