如何将含特殊WKT字段的CSV通过LOAD DATA INFILE导入MariaDB
MariaDB 含特殊字段CSV导入解决方案
1. 提前创建匹配的目标表
根据你提供的字段结构建表,字段类型可根据实际业务调整,示例如下:
CREATE TABLE land_records ( wkt TEXT NOT NULL, -- 后续需要做空间查询的话可替换为GEOMETRY类型 id INT UNSIGNED NOT NULL PRIMARY KEY, title_no VARCHAR(50) NOT NULL, status VARCHAR(20) NOT NULL, type VARCHAR(50) NOT NULL, land_district VARCHAR(50) NOT NULL, issue_date DATETIME NOT NULL, guarantee_status VARCHAR(20) NOT NULL, estate_description TEXT NOT NULL, owners VARCHAR(255) NOT NULL, spatial_extents_shared CHAR(1) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 使用正确参数的LOAD DATA INFILE语句
你之前导入失败的核心原因是没有正确指定字段包裹符,导致字段内部的逗号被误识别为字段分隔符。你提到的用WKT括号做分隔符的方案不建议使用,标准CSV格式本身支持用双引号包裹包含分隔符的字段,只要配置正确的解析参数即可完美适配你提供的CSV格式,不需要额外自定义规则。
导入语句示例:
LOAD DATA INFILE '/你的CSV文件绝对路径/xxx.csv' INTO TABLE land_records CHARACTER SET utf8mb4 -- 编码要和你CSV文件的实际编码保持一致 FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- 核心配置:指定字段被双引号包裹,内部的逗号不会被当成分隔符 ESCAPED BY '' -- 如果你CSV里的转义规则是双写双引号就保留这个配置,否则可以替换为ESCAPED BY '\\' LINES TERMINATED BY '\n' -- Windows系统生成的CSV换行符是\r\n的话,这里改成'\r\n' IGNORE 1 LINES; -- 如果CSV第一行是表头就保留这行,没有表头直接删除即可
如果遇到文件权限相关报错,可以把语句开头换成LOAD DATA LOCAL INFILE,同时提前执行SET GLOBAL local_infile = 1;开启本地文件导入权限。
3. 可选后续处理
如果导入后WKT字段有多余的外层括号,可执行批量更新清理:
-- 按需调整裁剪规则,比如去掉最外层的所有括号 UPDATE land_records SET wkt = TRIM(BOTH '()' FROM wkt); -- 需要做空间查询的话可把TEXT类型转为空间类型 ALTER TABLE land_records MODIFY COLUMN wkt GEOMETRY NOT NULL SRID 4326;
内容的提问来源于stack exchange,提问作者mikeldub
相关产品推荐
相关产品推荐

