【问题标题】:phpMyAdmin SQL Dump - Pattern for repetition of "INSERT INTO" linesphpMyAdmin SQL Dump - 重复“INSERT INTO”行的模式
【发布时间】:2017-09-12 11:45:21
【问题描述】:

我想用 Java PrintWriter 模仿 phpMyAdmin 的 SQL 转储函数,到目前为止一切正常,但我没有看到“INSERT INTO”重复的模式。

例子:

INSERT INTO `table` (`value`) VALUES
(0),
(1),
... <-- 975 lines hidden
(977),
(978);
INSERT INTO `table` (`value`) VALUES
(979),
(981),
... <-- 948 lines hidden
(1929),
(1930);
INSERT INTO `table` (`value`) VALUES
(1931),
(1932),
... <-- 963 lines hidden

“INSERT INTO”语句之间的行数不同,但不同表的行数相同。

因为我的表格大小会定期增加,所以我需要确定要在我的代码中实现的数字。


回答

所以,感谢 Sloan Thrashers 的回答和 gitHub 上 phpMyAdmin 的源代码,我发现,sql 查询的最大长度默认设置为 50000。

我个人情况下的解决方案:

我使用一个变量来计算当前查询中到目前为止的字符数,当我达到 50000 时,我插入一个新的“INSERT INTO”查询。

现在我的每行 Java 生成的 .sql 文件与从 phpMyAdmin 的导出函数导出的文件完全相同,并且将通过比较文件检查。

【问题讨论】:

    标签: mysql phpmyadmin


    【解决方案1】:

    当您在 phpAdmin 中导出表时,导出的设置之一是每次插入的记录数。因此,当您在生成值时遍历记录时,您会结束一个插入并在记录计数达到该数字时“重新启动”它。

    通常,您会根据记录大小改变该设置。这不是为了容纳 mySQL,而是为了允许某人在文件大小太大而无法通过电子邮件发送或上传等情况下编辑导出并将其拆分为多个文件。您可能想要拆分文件的另一个原因可能是由于特定 mySQL 安装中语句大小的限制(很少见)。

    在您的情况下,您可能会根据记录大小选择一个数字。像您的示例这样的导出可能使用较大的数字(3000 + ?),具有大量列或大列的表的导出可能使用较小的数字(50?)。

    【讨论】:

    • 感谢您的回答!如果您使用默认设置,是否有文档说明如何确定此数字?因此,如果所有值的字符数组合超过某个值,是否可以使用新的“INSERT INTO”?
    • 不是我见过的,但你可能会发现一些东西。大多数情况下它很直观,并且基于表模式。将列大小相加以获得粗略的想法。
    • 这听起来像是一个很高的要求,特别是因为 phpAdmin 所做的选择可能因运行而异,也可能因版本而异。
    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2016-02-19
    • 2014-03-22
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多