Teradata mLoad加载后目标表字符间出现空格问题求助
解决mLoad加载Teradata后字符间出现空格的问题
问题重现
源平面文件(CSV格式):
Employee_ID, Employee_First_Name, Employee_Salary 1,Jay,50000 2,Sam,60000 3,Tom,70000
经mLoad加载后,Teradata目标表(字段均为Varchar(1024))的数据变成:
1 , J a y , 5 0 0 0 0 2 , S a m , 6 0 0 0 0 3 , T o m , 7 0 0 0 0
核心原因
这种字符间插入空格的问题,90%以上是mLoad把单字节ASCII/UTF-8文本当成双字节编码(比如EBCDIC或UCS-2)解析,导致每个单字节字符被填充额外的空格字节;其次是输入格式定义错误,比如误用固定长度字段而非分隔符格式。
解决步骤
修正mLoad脚本的输入格式定义
确保脚本明确使用文本分隔符格式,避免二进制或固定长度设置。示例脚本片段:.LOGTABLE mload_employee_log; .LOGON teradata_host/user,password; .LAYOUT Employee_Layout; .FIELD Employee_ID * VARCHAR(1024) DELIMITER ',' TRIM BOTH; .FIELD Employee_First_Name * VARCHAR(1024) DELIMITER ',' TRIM BOTH; .FIELD Employee_Salary * VARCHAR(1024) DELIMITER '\n' TRIM BOTH; .DML LABEL Insert_Employee; INSERT INTO target_employee_table VALUES (:Employee_ID, :Employee_First_Name, :Employee_Salary); .IMPORT INFILE 'employee.csv' FORMAT TEXT LAYOUT Employee_Layout; .RUN DML Insert_Employee; .END LOGON;关键注意点:
- 必须指定
FORMAT TEXT,不要用FORMAT BINARY - 字段定义里的
TRIM BOTH可去掉字段前后冗余空格(适配源文件分隔符前后带空格的场景) - 最后一个字段的分隔符设为
\n(换行符),确保读取完整行
- 必须指定
匹配源文件与Teradata会话的字符集
在脚本开头添加字符集设置,确保和源文件编码一致(比如源文件是UTF-8的话):SET SESSION CHARSET 'UTF8';若源文件是纯ASCII,也可使用
SET SESSION CHARSET 'ASCII';检查源文件编码
用文本编辑器(如Notepad++)打开源文件,确认编码为UTF-8无BOM或ASCII,避免带BOM头的UTF-8文件——mLoad对BOM的处理容易出错。如果是其他编码,先转成UTF-8无BOM再加载。
额外排查点
若以上步骤无效,检查mLoad版本是否过旧(部分老版本对UTF-8支持存在bug);同时确认目标表字符集与会话字符集一致,避免插入时的编码转换错误。
内容的提问来源于stack exchange,提问作者Jordan Sabo
相关产品推荐
相关产品推荐

