MySQL导入CSV失败主因是默认用tab而非逗号分隔,须显式指定FIELDS TERMINATED BY ','或--fields-terminated-by=',';含引号字段需加OPTIONALLY ENCLOSED BY '"';PostgreSQL COPY要求严格匹配分隔符与格式;pandas.read_csv需确认真实分隔符;Excel导出CSV注意Windows换行符和BOM问题。
MySQL 导入 CSV 时提示 ERROR 1064 或 Using a password on the command line interface can be insecure 后实际失败?
这不是密码警告的问题,而是 mysqlimport 或 load data infile 默认用制表符 当分隔符,但你的 csv 是逗号分隔——没显式指定 fields terminated by ',',它就硬按 tab 解析,字段对不上,直接报语法错。
- 必须在
LOAD DATA INFILE语句里写明FIELDS TERMINATED BY ',',哪怕文件后缀是.csv -
mysqlimport命令行要用--fields-terminated-by=',',不能只靠文件名猜测 - 如果 CSV 有双引号包裹字段(比如含逗号的文本),还得加
OPTIONALLY ENCLOSED BY '"',否则会把引号当内容切开
PostgreSQL 的 copy 命令报 extra data after last expected column
这是典型的定界符不匹配:你指定了 DELIMITER ',',但某行末尾多了个逗号、或某字段里漏了引号导致解析错位。PostgreSQL 的 copy 对格式零容忍,不像 MySQL 会尝试跳过坏行。
- 先用
head -n 5 your_file.csv看前几行真实结构,确认是否真用逗号、有没有 BOM、空行、标题行 - 导入时加
CSV HEADER(如果有标题行),否则第一行会被当数据,列数立刻对不上 - 避免用
psql -c "COPY ..."直接写命令——shell 会提前解析引号和反斜杠;改用copy元命令或从文件读语句
Python pandas.read_csv() 读出来列数全乱,ParserError: Error tokenizing data
根本原因不是编码,是分隔符没对上:read_csv() 默认用 sep=',',但你的文件其实是分号 ;、竖线 |,甚至混合了空格+制表符。
- 别猜,用
file -i your_file.csv看编码,再用head -n 1 your_file.csv | od -c查真实分隔符的 ASCII 码(比如012是换行,011是 tab) -
sep参数支持正则,比如sep=r's*;s*'可吃掉分号两边空格;但别滥用,过度宽松会导致列合并 - 如果文件里有嵌套引号或换行符,必须设
quotechar='"'和escapechar='\',否则单行变多行
Excel 导出的 CSV 在 Linux 下用 awk 或 cut 处理失败
Windows Excel 默认用
换行,且可能带 UTF-8 BOM;Linux 工具认
,BOM 会让第一列变成 $'ufeffcol1',cut -d, -f1 就取不到干净值。
- 先用
dos2unix或sed 's/ $//'清换行符 - BOM 用
sed '1s/^//' file.csv > clean.csv去掉(注意不能用tr,它会破坏 UTF-8 多字节) -
cut只适合纯分隔符无嵌套的场景;一旦字段含逗号,必须换awk -F',(?=(?:[^"]*"[^"]*")*[^"]*$)' {...}这类带状态的解析










