phpMyAdmin中CSV的N被当字面量而非NULL,需取消勾选“Do not use NULL value”并确保目标字段允许NULL;否则即使写N也会因NOT NULL约束报错。

CSV里的N被当成普通字符串而非NULL
phpMyAdmin默认把N当字面量处理,不是NULL——这和MySQL命令行的LOAD DATA INFILE行为不一致。根本原因是phpMyAdmin导入层没启用“NULL值识别”开关,它只在你勾选了Do not use NULL value时才强制禁用该逻辑。
- 取消勾选
Do not use NULL value(这是最关键的一步) - 确保CSV中表示NULL的位置**严格写成
N**,不能是NULL、null、空字符串""或留空 - 字段类型需允许NULL:如果目标列定义为
NOT NULL且无默认值,即使填了N也会报错Field 'xxx' doesn't have a default value - 不要混淆
N和\N:后者是两个字符,会被当普通文本插入
为什么mysqlimport能识别N而phpMyAdmin不行
因为mysqlimport底层调用的是MySQL服务端的LOAD DATA INFILE,它原生支持N语法;而phpMyAdmin是PHP脚本模拟解析,走的是INSERT语句拼接路径,中间没有经过MySQL的NULL解析器。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
- 若必须用
N且数据量大,建议改用命令行:mysqlimport --fields-terminated-by=',' --lines-terminated-by=' ' --null-string='\N' -u root -p db_name data.csv -
--null-string='\N'里要写两个反斜杠,shell会吃掉一个,最终传给MySQL的是单个N - 此时
secure_file_priv必须配置为有效路径,且CSV文件得放在该目录下
字段含真实反斜杠时被误删(如Windows路径C: empile.txt)
这不是phpMyAdmin“过滤”,而是CSV解析器把 、
当转义序列处理了——尤其当字段没用双引号包裹时。
- 所有含反斜杠的字段必须用双引号包裹:
"C: empile.txt" - 字段内双引号需转义为
"",反斜杠本身不需要额外转义(RFC 4180未要求) - 避免用Excel“另存为CSV”:它会把
"C: emp"自动转成C: emp(变制表符) - 导出源头可控时,用SQL生成安全CSV:
SELECT CONCAT('"', REPLACE(path, '"', '""'), '"') FROM t;
N的支持完全依赖前端勾选项状态,且不校验目标列是否真允许NULL。哪怕你勾对了,只要表结构里有个NOT NULL列没设默认值,整行就会因“缺值”失败,错误提示却只说列数不匹配——这时候得回头查表定义,而不是反复调CSV格式。


















