MySQL没有原生BOOLEAN类型,建表时写的BOOLEAN或BOOL会被服务端直接重写为TINYINT(1),该类型本质是整数,取值范围为-128~127(有符号)或0~255(无符号),括号中(1)仅影响显示宽度,不改变存储或语义;正确用法需配合CHECK约束确保值域为{0,1},并注意JDBC连接参数tinyInt1isBit=false以避免ORM映射异常。

phpMyAdmin把"true"、"是"、"on"全转成0,因为TINYINT(1)只认0和1
MySQL的TINYINT(1)不是布尔类型,它只是个1字节整数;phpMyAdmin导入时不会做语义转换,遇到非数字字符串(如"true"、"是"、"ON")就按MySQL默认规则转成0——不是bug,是设计如此。
- 只有
"0"和"1"会被原样存入,其他任何值(包括空格、大小写混写的"True")都变成0 - 字段定义为
TINYINT(1) NOT NULL时,哪怕CSV里写的是"false",也会静默变0,不报错 - 别信Excel导出的CSV:它常把逻辑值自动转成"TRUE"/"FALSE"字符串,直接进phpMyAdmin就废了
怎么让CSV里的布尔值正确入库
核心是“源头控制+格式对齐”,不是靠phpMyAdmin识别语义。
从 CSV 数据集生成图数据库加载器和三元组映射。将表格 CSV 数据转换为图数据库可直接使用的节点、边和三元组。
- 导出端统一用
0和1:Excel里用=IF(A1,"1","0")公式替换;pandas用.astype(int)或.map({True: 1, False: 0}) - 导入页必须取消勾选
Do not use NULL value——否则连N都当字符串,更别说布尔映射 - 如果已有脏数据(比如CSV里混着"Y"/"N"),先用文本编辑器全局替换:
"Y"→"1"、"N"→"0",再导入
为什么改用BIT或ENUM也不解决根本问题
BIT字段在phpMyAdmin CSV导入中基本不可用——它会把"1"当成二进制位串解析,常报错;ENUM虽能定义ENUM('0','1'),但导入时仍要求字符串字面量完全匹配,且无法兼容NULL。
-
TINYINT(1)仍是事实标准,关键在数据端守规矩 - 想保留语义又免维护?改用
tinyint(1) DEFAULT NULL+ CSV里填N表示NULL,"0"/"1"表示明确值 - 别碰
BOOLEAN别名:它只是TINYINT(1)的同义词,没额外能力
真正容易被忽略的是:phpMyAdmin根本不解析布尔逻辑,它只做字符串到数值的强制转换。你看到的“全变0”,往往是因为CSV里压根没出现过纯数字"1"——可能是Excel自动转了格式,也可能是导出脚本用了json.dumps()一类默认输出True。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










