我的sql:PacketTooBigException:查询数据包太大(4,739,923 > 65,535)

1 mysql jdbc max-allowed-packet

我正在尝试连接到我的raspbery pi. 我已经mysql在 pi 上下载并已经在那里创建了一个数据库。我正在尝试使用驱动程序管理器进行连接。

这是我的代码:

public static void main(String[] args) {
    try {
        String host = "jdbc:mysql://scheduleit.duckdns.org:99/scheduleit";
        String uName = username;
        String uPass = password;
        Connection con = DriverManager.getConnection(host, uName, uPass);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已进入配置文件并将[ ] 更改max_allowed_packet为。我查看了其他配置文件,但无法找到另一个要编辑的 max_allowed_pa​​cket 字段。另外,我使用了命令:in 。32MmysqldumpSET GLOBAL max_allowed_packet=32M;mysql

我很好奇的一件事是主机名是否错误。我使用端口 99 ssh 进入 pi,但也许我在连接 ? 时使用不同的端口DriverManager。默认端口mysql是 3306,我尝试过,但没有建立连接。

最后,我使用的mariadb是 ,据我了解,它本质上是 mysql,因为我使用该命令登录mysql -u root -p。任何帮助将非常感激。

Bil*_*win 5

MySQL 服务器和客户端(在本例中为 JDBC)都必须增加 max_allowed_pa​​cket 的设置。最大值实际上是客户端和服务器配置中的较小者。

对于服务器,您可以使用 来更改它SET GLOBAL max_allowed_packet。您还应该在服务器的my.cnf文件中更改它,因为SET GLOBAL服务器重新启动时更改会丢失。

对于客户端,正如 Michael 上面评论的那样,您可以将其指定为 JDBC URL 中的属性。除了 JDBC 属性以驼峰命名法拼写外。

String host = "jdbc:mysql://scheduleit.duckdns.org:99/scheduleit?maxAllowedPacket=33554432";
Run Code Online (Sandbox Code Playgroud)

有关 JDBC URL 属性的更多文档,请参阅https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html 。