phpMyAdmin 导入导出完全指南:支持的格式、配置参数与插件实现原理
数据库后端【免费下载链接】phpmyadminA web interface for MySQL and MariaDB项目地址https://gitcode.com/gh_mirrors/ph/phpmyadmin点击查看免费下载phpMyAdmin 是 MySQL 与 MariaDB 的 Web 管理界面其导入Import与导出Export功能承担着数据备份、迁移、恢复与交换的核心职责。本文以 docs/import_export.rst 为主线结合仓库中 src/Plugins/Import 与 src/Plugins/Export 的插件源码系统讲解支持的格式清单、CSV/ODS 等格式的导入细节、SQL 导出的关键选项以及UploadDir/SaveDir等服务器端目录配置帮助读者在实战中完成可靠的数据导入导出。一、导入Import入口、方式与总体流程1.1 导入入口要导入数据在 phpMyAdmin 界面中进入Import导入标签页即可。如果想将数据导入到某个特定数据库或表需要先进入该数据库或表再打开Import标签页这样导入目标会自动定位到当前上下文。除了标准的Import / Export标签页外phpMyAdmin 还支持一种更快捷的导入方式将本地的 SQL 文件直接从文件管理器拖拽到浏览器中的 phpMyAdmin 界面即可完成上传与导入。1.2 三种导入方式根据数据来源phpMyAdmin 提供以下三种导入途径方式适用场景说明表单上传Form based upload任意支持的格式支持普通文件以及 (bg)zipped 压缩文件例如mydump.sql.gz表单 SQL 查询Form based SQL Query合法的 SQL 转储文件直接在文本框中粘贴或输入 SQL 内容执行使用上传目录Upload directory已提前放入服务器目录的文件需要配置$cfg[UploadDir]上传后可在导入对话框中直接选择该文件其中上传目录方式依赖服务器端配置具体见下文第四节。1.3 大文件导入与 FAQ如果导入大文件遇到问题请参考 docs/faq.rst 中的 FAQ 1.16faq1_16。该条目通常涉及 PHPupload_max_filesize、post_max_size、max_input_time等参数的限制以及UploadDir方式规避浏览器上传上限的实践。1.4 底层导入框架从源码结构看所有导入格式都由PhpMyAdmin\Plugins\ImportPlugin的子类实现它们位于 src/Plugins/Import 目录ImportCsv.phpCSV 格式phpMyAdmin 自研解析器ImportLdi.phpCSV using LOAD DATA使用 MySQL 内部解析器ImportMediawiki.phpMediaWiki 表格格式ImportOds.phpOpenDocument 电子表格ODSImportShp.phpESRI Shape 文件地理矢量数据ImportSql.phpSQL 格式ImportXml.phpXML 格式每个插件的核心入口是doImport()方法它通过Import::getNextChunk()分块读取文件支持解压与字符集转换将解析出的 SQL 语句通过runQuery()交给数据库执行。例如 ImportSql.php 使用BufferedQuery来自 SqlParser 工具库逐条切分 SQL 语句而 ImportOds.php 同样是分块读入缓冲区后解析。这一统一框架保证了对压缩文件、超时与大文件的分块处理能力。二、支持的导入格式详解2.1 CSVCSV逗号分隔值是电子表格软件和各类程序最常用的数据交换格式。注意auto_increment 字段当把 CSV 数据导入一张含auto_increment字段的表时CSV 中每条记录的auto_increment值应置为0零。这样 MySQL 才会为auto_increment字段正确生成自增值。服务器级 / 数据库级导入phpMyAdmin 现在支持在服务器或数据库层面直接导入 CSV 文件无需预先建表。系统会为你自动判定最合适best-fit的表结构并导入数据其余特性、要求与限制与表级导入一致。从 ImportCsv.php 源码看CSV 导入提供以下可选参数Name of the new table (optional)新建表的名称可选Name of the new database (optional)新建数据库的名称可选仅服务器级导入时出现Import these many number of rows (optional)仅导入前 N 行The first line of the file contains the table column names首行是否包含列名若未勾选第一行会被当作数据导入Column names表级导入当文件各列顺序与目标表不一致时在此按逗号分隔列出对应列名列名不加引号此外还有csv_ignore插入出错时是否继续、csv_replace是否以 REPLACE 方式插入、字段终止符/封闭符/转义符、换行符、NULL处理、空行处理等选项均可在导入界面按需配置。2.2 CSV using LOAD DATA与普通 CSV 相似但不使用 phpMyAdmin 的解析器而是调用 MySQL 内部的LOAD DATA解析器性能更高、语法更贴近原生。实现见 ImportLdi.php。该方式提供Use LOCAL keyword是否使用LOCAL关键字从客户端读取文件以及列名、出错是否中止等选项。注意ldi_local_option可配置为auto此时插件会依据服务器支持情况自动决定见 ImportLdi.php。此方式对文件类型、字符集转换有一定限制——源码中明确仅在未压缩、无需字符集转换时才走LOAD DATA路径见 ImportLdi.php。2.3 ESRI Shape FileESRI Shapefile简称 shapefile是地理信息系统GIS软件中流行的地理空间矢量数据格式由 Esri 制定并维护作为基本开放的数据互操作规范。phpMyAdmin 的导入实现见 ImportShp.php 与辅助类 ShapeFileImport.php。从源码可推断其要点依赖 PHPzip扩展处理.shp文件的 ZIP 压缩包若压缩包内含多个文件会按/^.*\.shp$/i规则定位.shp文件见 ImportShp.php若存在dbase扩展还会读取配套的.dbf属性文件以生成完整列结构见 ImportShp.php底层使用PhpMyAdmin\Gis\GisFactory与GisPoint、GisPolygon、GisMultiPoint等类把几何对象映射为 MySQL 的几何类型。因此导入 shapefile 前请确认服务器 PHP 环境已启用相应扩展且.shp、.dbf等配套文件齐全。2.4 MediaWikiphpMyAdmin 4.0 或更高版本导出的 MediaWiki 文件也可以被导入。这是 Wikipedia 展示表格所用的格式适合从 Wiki 页面反哺回数据库。2.5 OpenDocument SpreadsheetODS包含一个或多个工作表的 OpenDocument 工作簿可以直接导入。为了让导入尽可能简单ODS 文件需要按特定方式命名表名导入时phpMyAdmin 使用工作表sheet名作为表名。因此应在电子表格程序中把工作表重命名为目标表名或想要新建的表名新建表名称后续在 Operations 标签页也可以快速重命名。列名应将电子表格的第一行设为表头写入各列名称可在表格顶部插入新行实现。在导入界面勾选The first line of the file contains the table column names首行包含表列名复选框这样导入的数据才会落到正确的列中。注意电子表格中的公式和计算不会被求值只会读取最近一次保存时公式的值。请确保导入前所有值都已是最终所需状态。从 ImportOds.php 源码看ODS 导入还提供以下选项The first line of the file contains the table column names首行是否为列名Do not import empty rows跳过空行Import percentages as proper decimals把百分比按小数导入如12.00%→.12Import currencies把货币符号剥离后按数字导入如$5.00→5.00这些选项由setImportOptions()从请求参数中读取见 ImportOds.php。2.6 SQLSQL 可用于对数据进行任意操作也是恢复备份数据最常用的方式。SQL 导入由 ImportSql.php 实现它使用 SqlParser 的BufferedQuery分块提取完整语句支持自定义语句分隔符sql_delimiter。当服务器存在兼容性模式时SQL 导入界面还会提供见 ImportSql.phpSQL compatibility modeSQL 兼容模式从$dbi-getCompatibilities()获取服务器支持的 sql_mode 列表Do not use AUTO_INCREMENT for zero values零值不使用AUTO_INCREMENT对应NO_AUTO_VALUE_ON_ZERO模式。这两个选项会在导入前通过setSQLMode()设置会话的 SQL 模式见 ImportSql.php。2.7 XMLphpMyAdmin 3.3.0 或更高版本导出的 XML 文件可以被导入。文件中的结构数据库、表、视图、触发器等等和/或数据会被创建具体取决于文件内容。当前版本支持的 XML schema 尚未在文档中完整记录。从 ImportXml.php 源码看解析器会用simplexml_load_string将整个文件加载为SimpleXMLElement格式错误时会给出明确报错分析 XML 命名空间pma前缀与structure_schemas段从中读取数据库名、排序规则collation与字符集charset若文件不含结构段则从数据段中推断数据库名。三、导出Export格式清单与细节phpMyAdmin 可以将数据导出为文本文件甚至压缩文件保存到本地磁盘或保存到 Web 服务器的特殊目录由$cfg[SaveDir]配置。3.1 CodeGen以 ExportCodegen.php 实现输出 NHibernate 文件格式。规划中的版本还包括 Java、Hibernate、PHP PDO、JSON 等因此初命名为 codegen。3.2 CSV 与 CSV for Microsoft ExcelCSV逗号分隔值常用于电子表格与其他程序之间的数据交换。CSV for Microsoft Excel即预配置好的 CSV 导出变体可导入大多数英文版 Microsoft Excel。但某些本地化版本如丹麦语版期望使用;而非,作为字段分隔符需要相应调整。两个格式分别由 ExportCsv.php 与 ExportExcel.php 实现。3.3 Microsoft Word 2000如果你使用 Microsoft Word 2000 或更新版本或兼容软件如 OpenOffice.org可以使用此导出格式。实现见 ExportHtmlword.php。3.4 JSONJSONJavaScript Object Notation是一种轻量级数据交换格式易于人类读写、机器解析生成。版本变更4.7.0phpMyAdmin 4.7.0 起生成的 JSON 结构已改变以产出合法 JSON 数据。生成的 JSON 是对象列表各对象属性如下属性说明type对象类型取值为header导出头含注释与 phpMyAdmin 版本、database数据库开始标记含数据库名、table表数据导出version用于header类型表示 phpMyAdmin 版本comment可选的文本注释name对象名称——根据type不同表示表名或数据库名database对table类型而言表示数据库名data对table类型而言表示表内容示例输出摘自原文档由 ExportJson.php 生成[ { comment: Export to JSON plugin for phpMyAdmin, type: header, version: 4.7.0-dev }, { name: cars, type: database }, { data: [ { car_id: 1, description: Green Chrysler 300, make_id: 5, mileage: 113688, price: 13545.00, transmission: automatic, yearmade: 2007 } ], database: cars, name: cars, type: table }, { data: [ { make: Chrysler, make_id: 5 } ], database: cars, name: makes, type: table } ]3.5 LaTeX如果你想把表数据或表结构嵌入 LaTeX 文档这是合适的选择。LaTeX 是适合生成高质量科学、数学文档的排版系统也适用于从简单信件到完整书籍等各类文档它以 TeX 作为排版引擎。更详细的 TeX/LaTeX 资料可参考 Comprehensive TeX Archive NetworkCTAN及其 TeX 简介页面。导出的输出需要嵌入到 LaTeX 文档中才能被渲染例如下面的文档骨架实现见 ExportLatex.php\documentclass{article} \title{phpMyAdmin SQL output} \author{} \usepackage{longtable,lscape} \date{} \setlength{\parindent}{0pt} \usepackage[left2cm,top2cm,right2cm,nohead,nofoot]{geometry} \pdfpagewidth 210mm \pdfpageheight 297mm \begin{document} \maketitle % insert phpMyAdmin LaTeX Dump here \end{document}将 phpMyAdmin 导出的 LaTeX 片段插入到% insert phpMyAdmin LaTeX Dump here位置即可编译输出表格。3.6 TOONToken-Oriented Object Notation数据可导出为 TOON 格式这是一种基于文本的数据格式对 JSON 数据模型进行紧凑编码。TOON 的设计目标是在保持人类可读性的同时减少 LLM 提示词中的 token 用量适合面向大语言模型的场景。实现见 ExportToon.php。3.7 MediaWiki表和数据库都可以导出为 MediaWiki 格式Wikipedia 展示表格所用的格式。它可以只导结构、只导数据或两者都导也可包含表名或表头。实现见 ExportMediawiki.php。3.8 OpenDocument Spreadsheet 与 OpenDocument TextODS电子表格被广泛采用的开放电子表格标准LibreOffice、OpenOffice、Microsoft Office、Google Docs 等众多程序均可处理。实现见 ExportOds.php。ODT文本被广泛采用的开放文本数据标准大多数新式字处理软件如 LibreOffice、OpenOffice、Microsoft Word、AbiWord、KWord均支持。实现见 ExportOdt.php。3.9 PDF出于展示目的不可编辑的 PDF可能是最佳选择。实现见 ExportPdf.php 及其辅助类 src/Plugins/Export/Helpers/Pdf.php。3.10 PHP Array可以生成一个 PHP 文件其中声明一个多维数组包含所选表或数据库的内容。实现见 ExportPhparray.php。3.11 SQLSQL 导出可用于恢复数据库因此非常适合做备份。实现见 ExportSql.php。Maximal length of created query生成查询的最大长度选项该选项在官方文档中鲜有记载但实验表明它会将大型扩展 INSERT 语句拆分使每条 INSERT 不超过给定字节数或字符数。这样在导入大表时可以避免 Got a packet bigger than max_allowed_packet bytes 错误——该错误源于 MySQL 服务端max_allowed_packet对单条网络数据包大小的限制。从源码看此选项对应sql_max_query_size数字项见 ExportSql.php同类选项还包括二进制列以十六进制导出sql_hex_for_binary和TIMESTAMP 按 UTC 导出sql_utc_time见 ExportSql.php。SQL 导出数据选项Data OptionsComplete inserts完整插入为 SQL 转储添加列名。此参数提升转储的可读性与可靠性添加列名会增加转储体积但与 Extended inserts 配合时增加量可忽略不计。Extended inserts扩展插入将多行数据合并到单条 INSERT 查询中。这会显著减小大型 SQL 转储的文件体积、提高导入时的 INSERT 速度通常推荐启用。从 ExportSql.php 源码看Insertion method插入方式选项支持insert逐行INSERT、updateINSERT ... ON DUPLICATE KEY UPDATE、both两者结合如INSERT INTO tbl_name (col_A,col_B,col_C) VALUES (1,2,3), (4,5,6), (7,8,9)以及none不带列名如INSERT INTO tbl_name VALUES (1,2,3)可在导出界面按需选择。3.12 Texy!支持 Texy! 标记语言格式可在 Texy! 官方演示页查看效果示例。实现见 ExportTexytext.php。3.13 XML易于解析的导出格式适合与自定义脚本配合使用。版本变更3.3.0自 3.3.0 起使用的 XML schema 已发生变化。实现见 ExportXml.php。3.14 YAMLYAML 是一种既人类可读、又具备较强计算能力的数据序列化格式规范见 yaml.org。实现见 ExportYaml.php。四、服务器端目录配置UploadDir与SaveDir与导入导出强相关的两个配置项定义在 src/Config/Settings.php$cfg[UploadDir]Web 服务器上 phpMyAdmin 安装目录下的一个目录。把文件上传到该目录后即可在 phpMyAdmin 的导入对话框中选择该文件进行导入适合绕过浏览器上传大小限制的大文件场景。其描述见 src/Config/Descriptions.php。默认值为空字符串见 src/Config/Settings.php为空时该功能不生效。$cfg[SaveDir]Web 服务器上用于保存导出文件的目录。设置后导出文件可直接保存到服务器该目录而非下载到本地见 src/Config/Descriptions.php。默认值为空字符串见 src/Config/Settings.php。两个配置均在 src/Config/Settings.php 中通过setUploadDir()/setSaveDir()从配置数组读取见 src/Config/Settings.php并可在 Setup 页面的Features表单中设置见 src/Config/Forms/Setup/FeaturesForm.php。此外src/Config/ServerConfigChecks.php 会对SaveDir做存在性检查若配置了不存在的目录会给出提示。五、扩展机制如何编写自己的导入/导出插件phpMyAdmin 的导入导出能力是插件化的这也是其生态可扩展的基础。5.1 导入插件新建导入插件需遵循 src/Plugins/Import/README.md 中的结构类继承PhpMyAdmin\Plugins\ImportPlugin命名空间为PhpMyAdmin\Plugins\Import在构造函数中调用setProperties()注册插件名称setText与可处理扩展名setExtension并通过OptionsPropertyRootGroup/OptionsPropertyMainGroup/RadioPropertyItem等属性组件声明Format Specific Options界面选项核心逻辑写在doImport()中用Import::getNextChunk()分块取数据、追加到缓冲区解析、调用import-runQuery()逐条执行 SQL循环条件需检查$error、$timeout_passed、$finished等全局状态以支持超时与大文件。5.2 导出插件新建导出插件需遵循 src/Plugins/Export/README.md 中的结构类继承PhpMyAdmin\Plugins\ExportPlugin构造函数中调用setProperties()设置名称与扩展名及导出选项需要实现exportHeader()、exportFooter()、exportDBHeader()、exportDBFooter()、exportDBCreate()、exportData()等方法分别负责输出文件头、文件尾、数据库头、数据库尾、CREATE DATABASE语句与表数据还可按需实现exportRoutines()、exportStructure()、getTriggers()等可选方法。官方插件需使用 gettext 消息机制str*消息并在语言文件中定义自用插件可直接在代码中写文本。仓库中 src/Plugins/Import 与 src/Plugins/Export 下现成的 7 个导入插件与 15 个导出插件即是最佳参考范例。六、实践要点速查按目标选择导入入口先进入目标数据库/表再打开 Import 标签页或在服务器/数据库层级直接导入 CSV让系统自动判定表结构。CSV 导入注意自增列auto_increment列的值在 CSV 中写0才能正确触发自增。ODS 导入注意命名sheet 名即表名、首行放列名并勾选对应复选框公式值以最近保存结果为准。大文件导入优先考虑配置$cfg[UploadDir]走服务器上传目录或参考 FAQ 1.16 调整 PHP 上传限制导入大 SQL 时可通过Maximal length of created query拆分 INSERT规避max_allowed_packet报错。SQL 备份导出建议开启Extended inserts减小体积、加快导入必要时配合Complete inserts提升可读性与可靠性。JSON/XML 用途区分JSON 4.7.0 起为合法 JSON 结构含header/database/table三类对象XML 适合自写脚本二次解析两者 schema 均以 3.3.0 为分界发生过变更。TOON 面向 LLM需要减少 token 用量的场景可选用 TOON 导出。扩展开发参考src/Plugins/Import/README.md与src/Plugins/Export/README.md的模板继承ImportPlugin/ExportPlugin并实现相应方法即可接入新的数据格式。赞分享数据库后端【免费下载链接】phpmyadminA web interface for MySQL and MariaDB项目地址https://gitcode.com/gh_mirrors/ph/phpmyadmin点击查看免费下载相关推荐如何开始使用StrapiAwesome Strapi新手入门必备资源如何开始使用StrapiAwesome Strapi新手入门必备资源 Strapi是一个开源的Node.js Headless CMS能够帮助开发者轻松构建AnotherRedisDesktopManager 导入导出格式支持的数据格式AnotherRedisDesktopManager 导入导出格式支持的数据格式 一、概述 AnotherRedisDesktopManager以下简称 A数据库客户端桌面应用conda export 深度指南多格式环境导出的原理、参数与插件化实现conda export 深度指南多格式环境导出的原理、参数与插件化实现 本篇围绕 conda export 命令展开它如何将一个已安装的 conda 环境包管理器CLI上一篇DoL-Lyra整合包完全指南从安装到个性化配置的进阶之路下一篇Velero velero backup 命令族完整指南创建、查询、下载与日志排障创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考