phpMyAdmin导入CSV需四步预处理:先去除UTF-8 BOM,再统一换行符为LF(\n),然后确保含换行或逗号的字段用双引号包裹且“Fields enclosed by”设为",最后检查字段内引号是否转义为""。
phpMyAdmin导入CSV时换行符必须统一为\n
phpmyadmin的csv解析器只认\n(lf),不识别\r\n(crlf)或\r。一旦文件含\r\n,整张表会被当成单行处理,报错#1136 - column count doesn't match value count或字段全偏移。
- 用VS Code打开CSV → 右下角看换行符标识(显示
CRLF就需转换)→ 点击切换为LF→ 保存 - 命令行快速转:Linux/macOS执行
dos2unix file.csv;Windows可用Notepad++ → 编码 → 转为UTF-8无BOM → 编辑 → EOL转换 → Unix(LF) - 别信“看起来有换行”——Excel或记事本会渲染换行,但底层可能是
\r\n,必须查原始字节(如xxd file.csv | head看到0d 0a就是\r\n)
字段内换行必须用双引号包裹且ENCLOSED BY设为"
如果某列内容本身含换行(如地址栏写“杭州市\n西湖区”),仅统一外部换行符不够——phpMyAdmin必须靠引号识别该字段为整体,否则会在字段内换行处错误切行。
- 导出源(如Navicat、Excel)要启用“字段加引号”选项;若已导出,手动检查首行是否形如
"id","address","note",而不是id,address,note - phpMyAdmin导入页中,“Fields enclosed by”必须填
"(双引号),不能留空;若字段不含逗号/换行,可不加引号,但含换行时此参数必设 - 字段内引号需转义:原文是
他说:"OK",CSV里得写成"他说:""OK"""(两个双引号表示一个字面引号)
中文乱码不是字符集选错,而是BOM头干扰
即使数据库、表、列都是utf8mb4,导入后中文变问号,大概率是CSV文件开头藏了UTF-8 BOM(EF BB BF)。phpMyAdmin会把BOM当普通字符吃进第一列,导致整行字段错位+编码识别失败。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
- VS Code打开 → 右下角编码显示“UTF-8 with BOM” → 点击 → “Save with Encoding” → 选“UTF-8”(无BOM)
- Notepad++:编码 → 转为UTF-8无BOM → 保存
- phpMyAdmin上传前别勾“Do not use AUTO_INCREMENT for this column”之类无关选项,它们会干扰BOM检测逻辑
跳过损坏行在phpMyAdmin里不可控,必须预处理
phpMyAdmin没有on_bad_lines="skip"这类配置,遇到引号不闭合、字段数突变等坏行,直接中断导入,且不提示具体哪一行出错。想继续导入后续数据,只能提前清理。
- 用Python快速筛坏行:
python -c "import csv; [print(i,r) for i,r in enumerate(csv.reader(open('x.csv')))]" 2>/dev/null | head -20,看报错位置 - 人工删掉明显异常行(如引号没闭合、字段数与其他行差太多),或用
sed -i '/pattern/d' file.csv批量删含特定字符串的行 - 真正健壮的做法:改用
LOAD DATA INFILE语句(需服务器权限),它支持IGNORE和更细粒度错误控制,比phpMyAdmin界面可靠得多
\n → 再确认引号包裹 → 最后才进phpMyAdmin调参。四步漏一,基本就卡在报错里反复折腾。


















