数据库表迁移
DBA 把线上 200 万行订单数据从 MySQL 迁移到 PostgreSQL,原表结构有 30 个字段,建表语句要手写。用本工具把 CSV 表头(order_id, user_id, amount, created_at…)直接转成 CREATE TABLE 语句,字段类型自动映射为 TEXT/NUMERIC/TIMESTAMP,免去逐字段拼写 SQL 的枯燥劳动,避免字段名大小写不一致导致的建表失败。
SQL 将在这里呈现 —— 点「示例」试试当数据库建表语句还在一行行手敲,或面对几百行 CSV 不知如何拆字段时,这个工具把两个步骤压成一个。粘贴 CSV 内容,它自动解析列名与数据类型,同时输出 INSERT 和 CREATE TABLE 语句。所有解析在浏览器内完成,CSV 数据不会离开本机——适合快速建测试表、迁移遗留数据、或给同事生成可执行的建表脚本。
DBA 把线上 200 万行订单数据从 MySQL 迁移到 PostgreSQL,原表结构有 30 个字段,建表语句要手写。用本工具把 CSV 表头(order_id, user_id, amount, created_at…)直接转成 CREATE TABLE 语句,字段类型自动映射为 TEXT/NUMERIC/TIMESTAMP,免去逐字段拼写 SQL 的枯燥劳动,避免字段名大小写不一致导致的建表失败。
市场部每周五从 Excel 导出 5000 条用户参与记录(手机号、活动码、中奖金额),需要 INSERT 进 MySQL 活动表。手动拼 INSERT 语句容易漏掉末尾分号或把手机号当成数字字段。本工具自动将 CSV 每行转为 INSERT INTO 语句,字符串字段自动加单引号,数值字段保持原样,直接粘贴进 Navicat 执行即可。
前端开发在本地跑接口测试,需要 100 条虚拟用户记录(姓名、邮箱、年龄)。手工写 INSERT 语句耗时且数据无意义。把 Excel 里提前准备好的 100 行假数据另存为 CSV,用本工具生成 INSERT 语句,一次性导入本地 SQLite 数据库,接口联调时直接查询真实格式的测试数据。
财务每月从银行导出对账单 CSV(交易日期、摘要、金额),需要追加到已有的流水表。旧表已有 3 万行记录,新 CSV 有 800 行。本工具自动生成 INSERT 语句,字段顺序与 CSV 列顺序一致,避免手动调整字段映射时写错列名导致插入失败,且不依赖任何数据库客户端即可完成 SQL 准备。
数据分析师从业务系统导出 5000 条用户行为日志 CSV(event, page, duration),想在本地 MySQL 建临时表做聚合查询。手动写 CREATE TABLE 需定义每个字段类型和长度。用本工具将 CSV 表头直接转成建表语句,字段类型默认 TEXT,建表后直接 LOAD DATA 或逐条 INSERT,省去重复定义表结构的步骤。
| 输入 | 输出 | 说明 |
|---|---|---|
| id,name,age 1,张三,28 2,李四,35 3,王五,42 | CREATE TABLE csv_data ( id INT, name VARCHAR(255), age INT ); INSERT INTO csv_data (id, name, age) VALUES (1, '张三', 28), (2, '李四', 35), (3, '王五', 42); | 常规:三列混合数据类型(INT + VARCHAR),验证基本字段类型推断和INSERT多行合并 |
| 日期,销售额,是否达标 2024-01-01,12500.50,是 2024-01-02,9800.00,否 2024-01-03,15000.75,是 | CREATE TABLE csv_data ( 日期 DATE, 销售额 DECIMAL(10,2), 是否达标 VARCHAR(255) ); INSERT INTO csv_data (日期, 销售额, 是否达标) VALUES ('2024-01-01', 12500.50, '是'), ('2024-01-02', 9800.00, '否'), ('2024-01-03', 15000.75, '是'); | 常规:日期类型、小数金额、中文布尔值——验证DATE/DECIMAL类型识别及非英文值的处理 |
| id,email,备注 1,test@example.com, 2,user2@test.org,已离职 3,user3@domain.cn,在职 技术部 | CREATE TABLE csv_data ( id INT, email VARCHAR(255), 备注 VARCHAR(255) ); INSERT INTO csv_data (id, email, 备注) VALUES (1, 'test@example.com', NULL), (2, 'user2@test.org', '已离职'), (3, 'user3@domain.cn', '在职 技术部'); | 边界:空值单元格 → 输出NULL;含空格的值('在职 技术部')自动保留;邮箱地址因非标准类型归为VARCHAR |
| id,score 1,99.999 2,100.000 3,100.001 | CREATE TABLE csv_data ( id INT, score DECIMAL(10,3) ); INSERT INTO csv_data (id, score) VALUES (1, 99.999), (2, 100.000), (3, 100.001); | 边界:小数点后三位精度,验证DECIMAL精度推断——所有值小数位一致时按最大小数位数定义列类型 |
| name,phone 张三,13800138000 李四,010-12345678 王五,+86 13900001111 | CREATE TABLE csv_data ( name VARCHAR(255), phone VARCHAR(255) ); INSERT INTO csv_data (name, phone) VALUES ('张三', '13800138000'), ('李四', '010-12345678'), ('王五', '+86 13900001111'); | 易错:电话号码含空格/横线/加号——工具不会自动清洗格式,直接作为字符串保留;用户需自行预处理 |
| id,value 1,"包含,逗号" 2,"换行 文本" 3,简单值 | CREATE TABLE csv_data ( id INT, value VARCHAR(255) ); INSERT INTO csv_data (id, value) VALUES (1, '包含,逗号'), (2, '换行 文本'), (3, '简单值'); | 易错:CSV引用字段内的逗号和换行——工具正确解析引号包裹内容;若用户手动粘贴未转义的数据可能导致解析错误 |
| id,active 1,TRUE 2,FALSE 3,1 4,0 | CREATE TABLE csv_data ( id INT, active VARCHAR(255) ); INSERT INTO csv_data (id, active) VALUES (1, 'TRUE'), (2, 'FALSE'), (3, '1'), (4, '0'); | 边界:布尔值/数字字符串的歧义——TRUE/FALSE/1/0均视为字符串而非BOOL或BIT,保持原样输出,不自动转换类型 |
1.CSV 文件含 BOM 头导致 SQL 字段名带不可见字符
CSV 内容:id,name
1,张三用 UTF-8 without BOM 重新保存 CSV,或工具自动跳过 BOMBOM()是 UTF-16 遗留产物,多数 SQL 解析器不识别,会将其作为字段名首字符,导致 INSERT 语句语法错误或字段名异常。
2.字段值内包含逗号但未用引号包裹
张三,北京,朝阳区,100000张三,"北京,朝阳区",100000CSV 标准(RFC 4180)规定:字段内含逗号、换行或双引号时,必须用双引号包裹整个字段,否则解析器会将逗号误判为列分隔符。
3.字段值内包含双引号但未转义
张三,"北京"朝阳区",100000张三,"北京""朝阳区",100000CSV 标准要求:字段内若含双引号,需用两个双引号("")转义。单用反斜杠或未转义都会破坏字段边界,导致列数错乱。
4.数字字段混入千位分隔符或货币符号
price
$1,234.56price
1234.56SQL 的 DECIMAL/INT 类型只接受纯数字(含小数点),千位逗号、货币符号、百分号等会被视为非数字字符,导致 CAST 失败或插入 NULL。
5.日期格式不统一或非 ISO 8601 格式
date
2024/1/5
01/05/2024
Jan 5, 2024date
2024-01-05SQL 标准日期格式为 YYYY-MM-DD(ISO 8601)。斜杠、中文月名、月日年顺序等会被不同数据库解释为不同值,甚至直接报错。
6.列名包含 SQL 保留字或特殊字符
order,select,group
1,2,3order_id,select_val,group_name
1,2,3ORDER、SELECT、GROUP 等是 SQL 保留字,直接作为列名会导致 CREATE TABLE 语法错误。需用反引号(MySQL)或双引号(PostgreSQL)转义,或直接改名。
7.空值处理不一致:空字符串 vs NULL
name,email
张三,
李四,name,email
张三,
李四,(留空或显式写 NULL)CSV 中空字段和含空格的字段在 SQL 中含义不同:空字段通常转为 NULL,而含空格的字段(如 " ")会转为空字符串,导致后续查询和统计逻辑出错。
8.CSV 文件末尾多余空行导致生成多余 INSERT
id,name
1,张三
2,李四
(末尾空行)id,name
1,张三
2,李四多数 CSV 解析器会将末尾空行视为一行空数据,生成 INSERT INTO ... VALUES (); 这种语句在多数数据库中会因缺少 NOT NULL 字段值而报错。
INSERT INTO table_name (col1, col2, ...) VALUES (val1, val2, ...);
table_name目标表名,由用户指定col1, col2, ...CSV 表头映射的列名val1, val2, ...CSV 每行对应字段的值CSV 文件:id,name,age\n1,张三,28\n2,李四,35。生成 SQL:INSERT INTO users (id, name, age) VALUES (1, '张三', 28); INSERT INTO users (id, name, age) VALUES (2, '李四', 35); 共 2 条 INSERT 语句,每行对应一条。
可以。工具会把 CSV 第一行(列名)直接作为 SQL 列名。如果列名含中文、空格或特殊字符,生成的 CREATE TABLE 会自动用反引号(`)包裹,避免语法错误。例如列名「用户姓名」会变成 `用户姓名`。注意:如果数据库本身不支持中文列名,建议先在 CSV 中改列名为英文。
工具对每个字段做类型推断:如果一列中所有值都是纯数字(含小数),会设为 INT 或 DECIMAL;只要有一个值含字母、标点或空值,整列降级为 VARCHAR。如果你希望强制某列为数字,需先清理 CSV 中该列的脏数据(去空格、去引号、补全空值)。工具不提供手动指定类型的功能。
这是 CSV 中空单元格的常见问题。本工具默认将空单元格转为 SQL 的 NULL 关键字(无引号),不是字符串 'NULL'。如果看到 'NULL' 带引号,说明 CSV 中该单元格实际写入了字符串 'NULL' 或空格。建议在导入前用文本编辑器将 CSV 中的 'NULL' 替换为空,或检查是否有多余空格。
这是工具出于安全做的保守策略。VARCHAR(255) 能兼容绝大多数常见数据长度,避免因长度不足导致 INSERT 失败。如果你需要更精确的列长度(比如手机号用 VARCHAR(11)),建议在生成的 SQL 基础上手动修改。工具不分析每列最大字符数来自适应长度。
工具是纯前端(FE)实现,所有计算在浏览器本地完成,不经过服务器。处理速度取决于你的电脑性能和浏览器内存。实测 5 万行、10 列的 CSV 在主流笔记本上约 2-3 秒完成。如果文件过大(超过 50MB 或 20 万行),浏览器可能因内存不足卡顿,建议拆分成多个小文件分批转换。
工具不会自动转换日期格式。生成的 INSERT 里日期字段保持 CSV 原样(如 '2024/1/5'),数据库能否正确识别取决于你的数据库设置。对于 MySQL,需确保该列是 DATE 类型,且设置好日期格式(SET sql_mode='...')。更稳妥的做法:在 CSV 中提前将日期改为 '2024-01-05' 格式后再上传。
当前版本每次生成同时输出 CREATE TABLE 和 INSERT 两部分。如果你只需要 INSERT,可以复制结果中 INSERT 开头的部分,忽略前面的建表语句。工具没有提供单独开关来屏蔽某一部分,但输出区域是分段的,方便手动选取。后续可能会增加选项。
这是 CSV 中本身包含引号或反斜杠字符时,工具按 SQL 标准进行的转义(如单引号变成 '',反斜杠变成 \)。这些转义是合法的,直接执行不会出错。如果你觉得影响阅读,可以在 CSV 中提前替换/删除这些特殊字符;或者生成后手动用文本编辑器的替换功能去掉多余的反斜杠。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。