← 返回工具指南
工具指南CSVSQLPostgreSQLMySQLSQLite数据库导入

CSV 转 SQL 怎么避免导错类型?建表、NULL、日期与批量 INSERT 指南

讲清 CSV 转 PostgreSQL、MySQL、SQLite 时的字段类型推断、前导零、金额精度、NULL、日期时间、标识符转义与事务导入检查。

打开配套工具 →

CSV 只有文本、分隔符和行列结构,并不携带数据库字段类型、主键、外键或约束。把 CSV 转成 SQL 的难点并不是拼出 INSERT,而是决定哪些内容应该保持文本,哪些可以安全转换成数字、布尔值或日期。

可以使用 CSV 转 SQL 建表与 INSERT 工具 在浏览器本地解析样本,选择 PostgreSQL、MySQL 或 SQLite,检查每个字段的推断类型,再生成建表和批量插入语句。生成结果应当作为可审阅草稿,而不是直接在生产库执行的迁移脚本。

为什么类型推断最容易出错

CSV 中的 00123 看起来像整数,却可能是邮编、SKU、员工编号或带前导零的账户代码。转成数字后会变为 123,原始含义无法恢复。因此,含前导零的整列更适合保留为 TEXT

01 也可能表示布尔值、数量或等级。自动工具只能根据整列样本做推断,不能理解业务语义。导入前至少要人工检查 ID、邮编、电话、条码、金额、状态和日期字段。

如果样本只有前几百行,而后面出现了更长的文本、更高精度金额或无法解析的日期,推断仍可能失效。最终表结构应以完整数据范围和业务规则为准。

金额为什么不应随便使用浮点数

货币金额通常要使用固定精度类型,例如 PostgreSQL 的 NUMERIC(p,s) 或 MySQL 的 DECIMAL(p,s)p 是总有效位数,s 是小数位数。金额若用 REALFLOATDOUBLE,二进制浮点表示可能产生细微误差,汇总和对账时会暴露出来。

自动推断可以根据样本中最长整数位和小数位给出建议,但它不知道未来最大金额,也不知道货币是否允许三位小数。正式建表时应给增长留余量,并与财务系统的舍入规则一致。

SQLite 使用动态类型系统和类型亲和性,同一个列在某些情况下可以保存不同存储类别。可参考 SQLite 官方数据类型说明。即使 SQLite 接受更宽松的值,也不等于上游数据不需要校验。

空字符串、NULL 和文本 NULL 不是一回事

空字符串 '' 表示一个存在但长度为零的文本;SQL 的 NULL 表示未知或缺失;CSV 中写着 NULL 的单元格还可能只是四个普通字母。

导入前要明确:

工具允许设置空值标记,但规则应由数据提供方确认。尤其是备注、状态和商品文案,真实文本 N/A 不一定表示缺失。

日期和时间要先确定时区

2026-07-01 可以相对安全地映射为 DATE,但 2026-07-01 09:30:00 没有说明时区。它可能是北京时间、仓库当地时间或 UTC。直接写入 TIMESTAMP 之后再由不同应用解释,可能产生数小时偏差。

跨时区数据最好在源文件中使用带偏移的 ISO 8601,例如 2026-07-01T09:30:00+08:00,并明确数据库列使用带时区还是不带时区的类型。自动推断只能判断字符串形状,不能替你决定业务时区。

标识符和字符串如何正确转义

表名、字段名可能碰到 SQL 保留字,或包含空格、大小写与特殊字符。PostgreSQL 和 SQLite 通常用双引号引用标识符,MySQL 常用反引号。字符串值中的单引号要写成两个单引号,例如 O'Reilly 应生成 'O''Reilly'

这与把用户输入直接拼进应用查询不同。在线事务代码仍应使用参数化查询或数据库驱动的批量导入接口,不能把“生成的 SQL 已转义”当成通用的防注入方案。PostgreSQL 的标识符与字符串规则可参考 官方词法结构文档

为什么要分批生成 INSERT

一条 INSERT 包含全部几十万行,会让 SQL 文件难以查看,也可能超过数据库、代理或客户端的语句大小限制。每批 100 到 1,000 行通常更便于定位错误,但最佳批量大小取决于单行宽度和数据库配置。

大规模导入时,数据库原生的 COPYLOAD DATA 或导入命令通常更快。SQL INSERT 更适合小中型数据、需要审阅的交付文件,或无法直接访问导入接口的场景。

执行前的安全步骤

  1. 保留原始 CSV,并记录字符集和分隔符。
  2. 检查表名、字段名、重复表头和保留字。
  3. 人工确认 ID、邮编、金额、布尔值、日期时间与长文本类型。
  4. 确认 NULL 标记和空字符串的业务含义。
  5. 添加真正需要的主键、唯一约束、索引、默认值和外键。
  6. 先在空的测试表或事务中运行,并核对行数。
  7. 抽查包含中文、单引号、反斜杠、换行和极端数值的记录。
  8. 比较导入前后金额汇总、唯一 ID 数量和空值数量。

一个可靠的 CSV 转 SQL 流程,重点不是“SQL 能执行”,而是导入后字段含义、精度、空值和记录数量仍与源数据一致。