mysql - 如何计算MySQL语句的大小(不是查询结果)

标签 mysql database-connection max-allowed-packet

我正在开发一个针对 MySQL 数据库生成和运行 SQL 的工具。我正在尝试添加根据用户指定的设置限制插入语句大小的功能。我找到了一些有关 max_allowed_pa​​cket 设置的信息,但没有找到任何解释如何计算数据包大小的信息。 MySQL文档说“通信包是发送到MySQL服务器的单个SQL语句”,但我不明白SQL语句的大小是如何确定的。

我正在将 SQL 语句和一些参数传递给我的驱动程序:

cmd.CommandText= "INSERT INTO myTable VALUES(@int, @date, @text)";
cmd.Parameters.AddWithValue("@int", 1);
cmd.Parameters.AddWithValue("@date", DateTime.Now);
cmd.Parameters.AddWithValue("@text", "how big is this???");
cmd.ExecuteNonQuery();

数据包的大小是否只是所有变量和 SQL 语句的字符串表示形式中使用的字节的总和?或者我应该根据每个参数在数据库中占用的空间大小计算出每个参数的大小,并将其与 SQL 字符串中使用的字节相加?或者是其他东西?我不太确定数据库驱动程序是如何工作的,所以如果您对它们有所了解,那么围绕它的一些上下文可能会有所帮助。

最佳答案

结果是将 max_allowed_pa​​cket 与以 ASCII 编码通过线路发送的结果查询的大小进行比较。我只是将参数值(而不是参数名称)替换到 SQL 语句中,并获取结果字符串的大小。字节数是 MySQL 是否会拒绝该语句的准确预测,因此我可以根据该数字确定何时开始新语句。

关于mysql - 如何计算MySQL语句的大小(不是查询结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47840600/

相关文章:

java - hibernate 5 : db connections are still not released (idle in transaction) after lazy loading

更改 max_allowed_pa​​cket 参数后 MySQL 服务器无法启动

mysql - max_allowed_pa​​cket 正在重置为 1024,因为某些未知应用程序

php - 我可以在 foreach 循环中使用多个数组吗?

mysql - 具有多个选择语句的复杂 MySQL 查询

python - django 中的动态 SQL 连接查询

java - 一个应用程序中有多个 Spring @Transactional 注释?

java - 创建类路径资源中定义的名称为 'mongobee' 的 bean 时出错

php - MySQL:发送 QUERY 数据包时出错。 PID=2

mysql - Mysql/PhPMyAdmin 中 1138 的值为 999.99