Skip to content
data2026-07-253 分钟阅读

什么是 CSV 转 SQL

CSV 转 SQL 是将 CSV(逗号分隔值)格式的表格数据转换为 SQL INSERT 语句的过程,用于将数据批量导入数据库。

转换示例

CSV 输入:

id,name,email,age
1,张三,zhang@example.com,28
2,李四,li@example.com,32

SQL 输出:

INSERT INTO users (id, name, email, age) VALUES
(1, '张三', 'zhang@example.com', 28),
(2, '李四', 'li@example.com', 32);

为什么需要 CSV 转 SQL

  1. 数据迁移:从 Excel/CSV 批量导入数据到数据库
  2. 测试数据:快速创建大量测试数据
  3. 数据备份:将数据库导出为 CSV 后重新导入
  4. 系统集成:将第三方系统的 CSV 数据导入自有数据库
  5. 报表数据:将报表 CSV 数据写入分析数据库
  6. 初始化数据:为新数据库导入初始数据

转换注意事项

数据类型映射

| CSV 值 | SQL 类型 | 注意事项 | |--------|---------|---------| | 纯数字 | INT / BIGINT | 检查数值范围 | | 小数 | DECIMAL / FLOAT | 注意精度 | | 日期 | DATE / DATETIME | 注意日期格式 | | 布尔值 | BOOLEAN | true/false vs 1/0 | | 空值 | NULL | 区分空字符串和 NULL | | 文本 | VARCHAR / TEXT | 注意长度限制 |

SQL 注入防护

⚠️ 重要:CSV 数据中的特殊字符(如单引号 ')需要转义!

-- 错误:O'Brien 会导致 SQL 错误
INSERT INTO users (name) VALUES ('O'Brien');

-- 正确:转义单引号
INSERT INTO users (name) VALUES ('O''Brien');

如何使用在线工具

使用 DevToolkit Pro 的 CSV 转 SQL 工具

  1. 粘贴 CSV 数据
  2. 设置表名和列名
  3. 选择数据库类型(MySQL、PostgreSQL、SQLite)
  4. 自动生成 INSERT 语句
  5. 支持批量插入优化

代码中的 CSV 转 SQL

JavaScript

function csvToSQL(csv, tableName) {
  const lines = csv.trim().split('\n');
  const headers = lines[0].split(',').map(h => h.trim());
  const values = lines.slice(1).map(line => {
    return '(' + line.split(',').map(val => {
      val = val.trim();
      if (val === '' || val === 'NULL') return 'NULL';
      if (!isNaN(val)) return val;
      return "'" + val.replace(/'/g, "''") + "'";
    }).join(', ') + ')';
  }).join(',\n');

  return `INSERT INTO ${tableName} (${headers.join(', ')}) VALUES\n${values};`;
}

Python

import csv
import io

def csv_to_sql(csv_text, table_name):
    reader = csv.reader(io.StringIO(csv_text))
    headers = next(reader)
    columns = ', '.join(headers)

    rows = []
    for row in reader:
        values = []
        for val in row:
            if val == '' or val.upper() == 'NULL':
                values.append('NULL')
            elif val.replace('.','',1).replace('-','',1).isdigit():
                values.append(val)
            else:
                values.append("'" + val.replace("'", "''") + "'")
        rows.append('(' + ', '.join(values) + ')')

    return f"INSERT INTO {table_name} ({columns}) VALUES\n" + ',\n'.join(rows) + ';'

批量导入优化

-- MySQL: 使用 LOAD DATA 导入(最快方式)
LOAD DATA INFILE '/path/to/data.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

-- PostgreSQL: 使用 COPY 命令
COPY users (id, name, email, age)
FROM '/path/to/data.csv'
DELIMITER ','
CSV HEADER;

FAQ

CSV 中有换行怎么办?

如果字段内包含换行,需要用双引号包裹该字段。在线工具通常能自动处理这种情况。手动处理时,确保字段被双引号包裹。

导入大量数据很慢怎么办?

  1. 使用批量 INSERT 代替单条 INSERT
  2. 使用数据库原生导入命令(LOAD DATA / COPY)
  3. 暂时禁用索引和约束,导入后重建
  4. 分批导入(每批 1000-5000 条)
  5. 使用事务包裹导入操作

CSV 和 SQL 的编码不一致怎么办?

确保 CSV 文件使用 UTF-8 编码。数据库连接也要设置 UTF-8 编码。在 MySQL 中使用 SET NAMES utf8mb4


本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页


ad