0

我正在编写将使用批量插入语句的迁移。它在数据库中搜索某些信息并将其编译为特定表中使用的格式并使用下面的 INSERT 方法将其写入。将运行它的 MySQL 机器都有一个 16MB 的 max_allowed_pa​​cket 大小,我无法更改。

我对此很陌生。当我的缓冲区中的字符刚好低于 16MB 时,我试图插入缓冲区中的内容。这是行不通的。max_allowed_pa​​cket 大小超过 16MB 并导致问题。对于任何知道自己在做什么的人(但对我而言),原因可能很明显。

我需要知道如何计算给定 max_allowed_pa​​cket 大小可以插入多少个字符。我们正在使用 INNODB 存储引擎。

这或多或少是我的插入语句的样子:

INSERT INTO _table_ (col_name1, col_name2, col_name3) 
      VALUES (val1, val2, val3), (val1, val2, val3), (val1, val2, val3)... etc.

如果我需要提供更多信息,请告诉我。在这一点上,我真的不知道该怎么办。

编辑以澄清问题。

4

2 回答 2

1

我遇到了类似的问题,并通过反复试验发现了以下问题。

  1. max_allowed_pa​​cket-1 是查询可以包含的最大字符数。
  2. 查询中的空格被添加到查询的长度中

例如。

INSERT INTO _table_ (col_name1) Values('value1')    -- 1   

短于

INSERT INTO _table_ (col_name1   ) Values('value1'    )    -- 2  

在考虑字符串长度时,这似乎相当明显,但是将两者视为查询,并且您希望两者的行为完全相同。
如果 max_allowed_pa​​cket 大于上面 '1' 的长度并且小于 '2',那么 2 不会执行而 1 正常运行

于 2013-07-08T20:08:57.270 回答
0

阅读我提供的链接和网页中的用户评论会产生一个命令:

show variables like 'max_allowed_packet';

这允许客户端向服务器询问其配置设置。

Variable_name       Value
max_allowed_packet, 1048576

应用程序当然可以控制客户端 SQL 驱动程序以将其设置为匹配(或更大)。

于 2012-09-19T06:42:21.153 回答