MySQL保存Boolean值时,用1代表TRUE,0代表FALSE,boolean类型在MySQL里的类型为tinyint(1)。
1.创建表
create table test(
id int PRIMARY key,
status boolean
)
这样是可以创建成功。查看建表后的语句会发现,mysql把它替换成tinyint(1)。
CREATE TABLE `test` (
`id` int NOT NULL,
`status` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
在pojo里直接定义该属性为布尔值即可:private Boolean status
避免使用长度为1的tinyint类型字段存储数字格式的数据;
MySQL Boolean类型的坑
MySQL中,Boolean只是 tinyint(1) 的别名,也就是说,MySQL中并没有真正的bool类型。而SQLAlchemy生成SQL的时候并没有检测到 这一点,这就导致一个问题,当使用 bool 类型作为查询条件时,用不上索引,从而导致扫表的行为: