列映射步骤是唯一能手动调整字段类型的地方,需在此页逐列设置转换规则、日期格式及空值标识,否则将导致类型不匹配报错或静默数据丢失。

导入向导里哪一步能改字段类型映射
在 DBeaver 导入 CSV 的向导中,列映射 这一步(通常为第三或第四屏)才是唯一能手动调整字段类型的地方。前几步选文件、设编码、调分隔符都只是预处理,真正决定“哪一列进哪个字段、转成什么类型”,全靠这页的表格。它默认会根据目标表结构填好映射关系,但不会自动适配源数据内容——比如源列全是 "2024-01-01" 字符串,目标列却是 DATE,DBeaver 不会主动帮你解析,得你点开下拉菜单手动选转换规则。
目标列类型不匹配时的常见错误现象
不改映射直接下一步,大概率触发以下报错:
-
Cannot convert value '1,234' to integer:源数据含千分位逗号,但目标列为INT或DECIMAL -
Incorrect datetime value: '2024/01/01 10:30':源日期格式是YYYY/MM/DD HH:MM,但目标列期望YYYY-MM-DD HH:MM:SS -
Data truncation: Data too long for column 'name':CSV 中某字段实际长度超了目标表VARCHAR(50)定义
这些不是“导入失败就停住”,而是部分行静默跳过或截断,导致数据丢失却不报错——尤其危险。
怎么在列映射页正确设置类型转换
进入 列映射 页面后,对每一列可操作如下:
- 点击目标列右侧的
...按钮,打开转换配置面板 - 类型转换选
Cast to target type(强制转)或Use expression(写 SQL 表达式),比如把带逗号的数字转成整数:REPLACE(<code>source_column, ',', '')::INTEGER - 日期列务必点开
Date/time format输入框,填真实源格式,如yyyy/MM/dd HH:mm,别依赖“自动识别” - 空值处理:若源用
NULL、\N或空字符串表示缺失,要在Null string栏填对应值,否则全当普通字符串插进去
为什么不能只靠建表时定义类型
目标表字段类型只是“容器”,不参与导入时的数据解析逻辑。DBeaver 的 DataImporterCSV.java 模块在读取 CSV 行时,先按字符串逐字段切开,再根据你在映射页选的规则做转换。也就是说:
- 即使目标列是
TIMESTAMP,你没在映射页指定日期格式,它就按原始字符串塞进去,数据库层面报错 - 即使目标列是
TEXT,你没处理源里的换行符(),CSV 解析器可能误判为新行,导致列错位 - 自增主键列如果勾选了
Transfer auto-generated columns,又没关掉,DBeaver 会试图往id列写值,违反数据库约束
真正起作用的是映射页那一组配置,而不是表结构本身——这点容易被忽略,尤其当表已存在且字段名和 CSV 列名一致时,人容易下意识跳过这页。

















