phpmyadmin导入csv时,“true”/“false”会被mysql强制转为0并可能触发#1366错误;需用文本编辑器全局替换为"1"/"0",确保首行字段名匹配且无bom/空格,或改用enum/varchar类型规避隐式转换。

phpMyAdmin把CSV里的"true"/"false"当字符串写进TINYINT(1)字段
phpMyAdmin不解析布尔语义,只按MySQL底层规则转换:TINYINT(1)字段只接受0或1,其他任何值(包括"true"、"false"、"是"、"否")都会被强制转成0,甚至触发#1366 - Incorrect integer value错误。
- 用文本编辑器全局替换:
"true"→"1","false"→"0";注意保留双引号包裹,避免破坏CSV结构 - 如果CSV首行是字段名,确保该列名对应表中TINYINT(1)字段,且后续所有数据行该列只含
0或1 - 别依赖Excel“值替换”——它可能删掉引号或改换行符;用VS Code的正则替换更可靠:
"(true)"→"1","(false)"→"0" - 导入前用
head -n5 data.csv | cat -A确认替换后无残留控制符或空格
为什么勾选"Column names in first row"后还报#1366错误
错误信息里出现'id' for column 'id'这类提示,说明phpMyAdmin误把字段名当数据读了——常见于CSV首行确实是字段名,但你没勾选Column names in first row,或勾选了却因BOM/空格导致首行列数识别失败。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
- 用VS Code打开CSV,看左下角是否显示
UTF-8 with BOM;如果是,另存为UTF-8(无BOM) - 检查首行末尾有没有不可见空格:光标移到行尾按→键,若多跳一次说明有空格,需删除
- 确认首行字段名数量与目标表
SHOW COLUMNS FROM table_name结果完全一致,缺一不可 - 若表有自增
id字段,CSV首行**不要写id字段名**,否则phpMyAdmin会尝试往id插"id"字符串,直接触发#1366
想保留"true"/"false"语义,又不想手动改CSV怎么办
唯一稳妥方案是改表结构:把TINYINT(1)换成ENUM('0','1')或BOOLEAN(MySQL中BOOLEAN只是TINYINT(1)别名,本质一样),或者直接用VARCHAR(5)存字符串。但注意:改类型后,已有数据和应用层逻辑都要同步适配。
-
ALTER TABLE table_name MODIFY COLUMN flag_col ENUM('0','1') DEFAULT '0';—— 这样导入"true"会报错,但至少明确拒绝,比静默变0好排查 - 如果业务允许,把字段改为
VARCHAR(5),再在应用层做if ($val === 'true')判断;数据库层不承担布尔语义解析 - 千万别用
SET sql_mode = ''临时关严格模式——这会让"true"静默转0,埋下数据一致性隐患
真实场景里最容易被忽略的点:CSV里混用半角/全角引号、字段名含中文或空格、导出时用了WPS而非phpMyAdmin原生导出——这些都会让布尔值替换后依然错位。动手前先用file -i your.csv和head -n2 your.csv | hexdump -C看一眼原始字节,比猜强十倍。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










