MySQL数据库中tinyint类型字段读取数据为true和false (MySQL的boolean和tinyint(1))

数据库一个表中有一个tinyint类型的字段,值为0或者1,若是取出来的话,0会变成false,1会变成true。mysql

MySQL保存boolean值时用1表明TRUE,0表明FALSE。boolean在MySQL里的类型为tinyint(1)。MySQL里有四个常量:true,false,TRUE,FALSE分别表明1,0,1,0。sql

场景:数据库

  字段:status (值为1,2,3)url

  类型:tinyint  长度:1(有符号的)spa

  结果:查询出来的数据列表,状态值无论是1仍是2仍是3,都是"boolean true"code

分析并解决:blog

  分析:因为MySql中没有boolean类型,因此会用到tinyint[1]类型来表示,在mysql中boolean=tinyint[1]ip

  解决:tinyint类型长度的问题,当我把长度改为4时,查询结果就正常了utf-8

猜测并使用新的方法解决:字符串

  若是不改变类型的长度,怎么让查询的结果正确呢?须要在查询语句上面作修改了

  在你须要执行的sql语句中,把这个状态字段*1,结果就会获得数据库存的值了(注意:记得加别名,否则查询出来的就是status*1 => '1')

SELECT id, name, status*1 AS status, add_time FROM tableName WHERE play_type = 0

总结一下以上的两种解决方法:

  1.修改tinyint类型的长度

  2.在查询的sql语句上面作修改 

因此由这里能够看出,当你使用tinyint[1]来存储超过0,1两个值之外的值,好比存储2,那这个2就是脏数据就用tinyint[4],tinyint[1]只适用于存储0和1两个值,也即真和假,true和false

  通常的,我们若是存的是纯数字的话,建议用tinyint,若是是字符串,且是固定长度的,建议用char,而enum的枚举字段,使用的使用须要慎重考虑,避免带来没必要要的麻烦

还有一种方式是在链接url上添加 tinyInt1isBit=false :

url: jdbc:mysql://192.168.17.107:3306/oip_back?useUnicode=true&characterEncoding=utf-8&useSSL=false&tinyInt1isBit=false
相关文章
相关标签/搜索