phpMyAdmin默认不将CSV中NULL、N或空字符串转为SQL NULL,仅字面插入;需同时满足字段允许NULL、关闭引号包裹、并在“NULL值表示为”中精确填写对应标识符(如NULL或N)才生效。
phpmyadmin 默认不把 csv 中的 null、 或空字符串当数据库 null 处理,它只按字面值插入——除非你手动开启对应选项并确保格式完全匹配。
它不会自动将文本 NULL 解析为 SQL 的 NULL 值,也不会把两个逗号之间留空(,,)当作 NULL。默认行为是:空字段存成空字符串 '',NULL 字符串存成字符串 'NULL',N 存成字面量反斜杠加 N。
NULL 时,纯空单元格(如 ,,)才可能转成 SQL NULL
NULL(全大写)必须配合「NULL 值表示为」字段填写 NULL,且该选项仅在「使用引号包裹字段」未启用时才生效(否则会被当作文本)N 同样要填进「NULL 值表示为」框,并确保 CSV 文件里真写了 N,不是 N 或 /N
NOT NULL,即使勾了「空字符串转为 NULL」,导入也会失败——因为 NULL 不被允许看到 Incorrect integer value: '' for column 'age',说明空字符串进了 INT 列;看到 Data truncated for column 'status',可能是 NULL 被当字符串截断;看到第一行数据变成 NULL 字符串,大概率是没勾「第一行包含列名」,导致头被当数据插了。
"NULL"(带引号)→ phpMyAdmin 当普通字符串,不会触发 NULL 转换; 分隔但没改「字段分隔符」→ 整行被当一列,NULL 埋在中间根本没机会识别NULL 可能变成 NULL,识别失败TINYINT NOT NULL DEFAULT 0 → 即使传了 NULL 或空,也会被静默转成 0,但你查不到 NULL,也看不到报错想让 NULL 文本变 SQL NULL,必须同时满足三个条件:字段允许 NULL、关闭引号包裹(或确保 NULL 不在引号内)、显式声明 NULL 标识符。
, 或 ;),别留空格NULL 出现在无引号的单元格里(如 1,NULL,2023-01-01,不是 1,"NULL",2023-01-01)NULL(注意大小写,不能小写 null)NULL,例如 score INT NULL,而不是 score INT NOT NULL
最易被忽略的一点:phpMyAdmin 的 NULL 识别完全依赖你填的「NULL 值表示为」字符串是否与 CSV 内容**字节级一致**——多一个空格、大小写不对、带 BOM、混用引号,都会让它失效。不要假设它“应该懂”,得让它“只能认这个”。
立即学习“PHP免费学习笔记(深入)”;