我正在开发一个针对 MySQL 数据库生成和运行 SQL 的工具。我正在尝试添加根据用户指定的设置限制插入语句大小的功能。我找到了一些有关 max_allowed_packet 设置的信息,但没有找到任何解释如何计算数据包大小的信息。 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_packet 与以 ASCII 编码通过线路发送的结果查询的大小进行比较。我只是将参数值(而不是参数名称)替换到 SQL 语句中,并获取结果字符串的大小。字节数是 MySQL 是否会拒绝该语句的准确预测,因此我可以根据该数字确定何时开始新语句。
关于mysql - 如何计算MySQL语句的大小(不是查询结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47840600/