将平面文件导入MariaDB时遇1064语法错误,求排查解决
MariaDB LOAD DATA 1064语法错误排查与解决
问题场景
两段结构相似的LOAD DATA导入平面文件代码,一段可正常运行,另一段触发1064语法错误。
正常运行的代码片段
SET GLOBAL local_infile = 'ON'; SHOW GLOBAL VARIABLES LIKE 'local_infile'; LOAD DATA LOCAL INFILE 'E:\\MM012224.txt' INTO TABLE `denton24`.`mm012224` (@row) SET Account_Number = TRIM(SUBSTR(@ROW,1,30)), SPTB_Code = TRIM(SUBSTR(@ROW,31,3)),
触发语法错误的代码片段
SET GLOBAL local_infile = 'ON'; SHOW GLOBAL VARIABLES LIKE 'local_infile'; LOAD DATA LOCAL INFILE 'E:\\tax_roll.txt' INTO TABLE `dallas24`.`tax_roll` (@row) SET ACCOUNT = TRIM(SUBSTR(@ROW,1,34)), SET YEAR = TRIM(SUBSTR(@ROW,35,4)), SET JURISDICTION = TRIM(SUBSTR(@ROW,39,4)),
问题原因
报错的核心是违反了LOAD DATA语句的语法规范:在SET子句中,仅需在开头声明一次SET,后续多个字段的赋值操作直接用逗号分隔即可,不需要为每个字段单独添加SET关键字。
第一段代码仅在开头使用了一次SET,符合语法要求;第二段代码为每个字段都重复添加了SET,这是导致1064语法错误的直接原因。
解决方法
修改报错代码,移除后续字段前的SET关键字,同时建议在最后一个字段赋值末尾添加分号以确保语句完整:
SET GLOBAL local_infile = 'ON'; SHOW GLOBAL VARIABLES LIKE 'local_infile'; LOAD DATA LOCAL INFILE 'E:\\tax_roll.txt' INTO TABLE `dallas24`.`tax_roll` (@row) SET ACCOUNT = TRIM(SUBSTR(@ROW,1,34)), YEAR = TRIM(SUBSTR(@ROW,35,4)), JURISDICTION = TRIM(SUBSTR(@ROW,39,4));
内容的提问来源于stack exchange,提问作者markj
相关产品推荐
相关产品推荐

