分隔符被转义时,如何将TXT文件加载到MariaDB?
解决MariaDB加载竖线分隔文件时转义符导致列偏移的问题
核心问题分析
你的数据行|number|text \|||中,\|是用来表示字段内的竖线,但MariaDB默认转义规则会将\|解析为普通竖线,导致这个竖线被误判为字段分隔符,进而引发后续列偏移。
可行解决方案
方案1:关闭默认转义,手动替换转义序列
通过关闭默认转义规则,让MariaDB将\|当作普通字符串处理,再通过REPLACE函数将其替换为目标竖线,同时避免分隔符误判。
示例SQL语句:
LOAD DATA INFILE '/绝对路径/你的文件.txt' INTO TABLE 目标表名 FIELDS TERMINATED BY '|' ESCAPED BY '' -- 关闭默认反斜杠转义 LINES TERMINATED BY '\n' -- 根据文件实际换行符调整,比如'\r\n' (@col1, @col2, @col3, @col4, @col5) -- 用用户变量接收所有列,数量需匹配表字段数 SET 列1 = @col1, 列2 = @col2, 列3 = REPLACE(@col3, '\\|', '|'), -- 将\|替换为| 列4 = @col4, 列5 = @col5;
方案2:明确指定转义规则(适用于默认规则未生效的情况)
如果方案1不适用,可明确指定反斜杠为转义符,确保MariaDB将\|识别为字段内的竖线而非分隔符。
示例SQL语句:
LOAD DATA INFILE '/绝对路径/你的文件.txt' INTO TABLE 目标表名 FIELDS TERMINATED BY '|' ESCAPED BY '\\' -- SQL中需用双反斜杠表示实际的反斜杠转义符 LINES TERMINATED BY '\n' IGNORE 1 LINES; -- 文件包含表头时添加此行跳过
注意事项
- 替换文件路径、表名、列名时需与实际环境一致
- 确认文件的换行符类型(
\n或\r\n),避免加载时出现行解析错误 - 若表字段数量与文件列数不符,需调整用户变量的数量
内容的提问来源于stack exchange,提问作者Scorpia
相关产品推荐
相关产品推荐

