最近适用unity连接数据库遇到一个问题“MySqlException: Packets larger than max_allowed_packet are not allowed”

本文介绍了在使用Unity与MySQL交互时遇到'MySqlException: Packets larger than max_allowed_packet are not allowed'异常的解决方案。提供三种方法:1. 通过SQL查询修改max_allowed_packet限制;2. 修改my.ini配置文件;3. 使用MySqlBackup.NET设置MaxSqlLength。每种方法详细阐述了操作步骤和注意事项。

这是MySql.Data.DLL在查询长度大于最大长度限制的条件下引发的异常消息(错误)之一;
您可以通过3种方式解决此问题:

第一种方式:执行SQL查询/语句来修改限制
将长度限制设置为32MB:
SET GLOBAL max_allowed_packet=3210241024;

将长度限制设置为1GB(MySQL服务器中允许的最大值):
SET GLOBAL max_allowed_packet=102410241024;

要么 SET SESSION
SET SESSION max_allowed_packet=102410241024;
你需要注意的事情:

您用于连接MySQL服务器的USER需要具有修改任何GLOBAL变量的权限(管理权限)。
SET GLOBAL将在新连接上生效,而不是在当前连接上生效。
SET SESSION将在当前连接上生效。
重新启动MySQL服务器后,更改将重置。
用于修改样品C#代码max_allowed_packet通过使用SET GLOBAL:
使用(MySqlConnection conn = new MySqlConnection(connectionString))
{
使用(MySqlCommand cmd = new MySqlCommand())
{
cmd。Connection = conn ;
cmd。Open();

    cmd。CommandText  =  “ SET GLOBAL max_allowed_pa​​cket = 32 * 1024 * 1024; ” ;
    cmd。ExecuteNonQuery();

    //关闭并重新打开Connection 
    conn。Close();
    cmd。Open();

    //开始在这里生效... 
    //做点什么......

   com.Close();
}

}
第二种方式:修改选项文件my.ini
停止MySQL服务器。
在服务器上打开MySQL选项文件 - my.ini在以下部分mysqld添加以下行:
max_allowed_packet=32M
重启MySQL服务器。
这将更改max_allowed_packet所有连接的永久值。
阅读MySQL官方文档:http: //dev.mysql.com/doc/refman/5.7/en/packet-too-large.html

第三种方式,MaxSqlLength进入MySqlBackup.ExportInfo
如果您不允许或没有max_allowed_packet在MySQL中修改的权限,则必须设置MySqlBackup.NET将生成的单个组合SQL转储查询的最大长度限制:

示例:将最大长度限制为1MB:

使用(MySqlConnection conn = new MySqlConnection(constring))
{
使用(MySqlCommand cmd = new MySqlCommand())
{
使用(MySqlBackup mb = new MySqlBackup(cmd))
{
cmd。Connection = conn ;
mb.ExportInfo.MaxSqlLength = 1024 * 1024; // 1MB
mb。ExportInfo。MaxSqlLength = 1024 * 1024 ; // 1MB
MB。ExportToFile(file);
}
}
}
注意:如果表包含具有大数据长度数据类型的列,例如:MEDIUMTEXT,LONGTEXT,MEDIUMBLOB,LONGBLOB。您可能无法使用上述代码导入转储文件。这是因为MySQL服务器阻止了任何大于默认值的SQL长度max_allowed_packet。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值