MySQL数据库中tinyint类型字段读取数据为true和false (MySQL的boolean和tinyint(1))
数据库一个表中有一个tinyint类型的字段,值为0或者1,如果取出来的话,0会变成false,1会变成true。
MySQL保存boolean值时用1代表TRUE,0代表FALSE。boolean在MySQL里的类型为tinyint(1)。MySQL里有四个常量:true,false,TRUE,FALSE分别代表1,0,1,0。
场景:
字段:status (值为1,2,3)
类型:tinyint 长度:1(有符号的)
结果:查询出来的数据列表,状态值不管是1还是2还是3,都是"boolean true"
分析并解决:
分析:由于MySql中没有boolean类型,所以会用到tinyint[1]类型来表示,在mysql中boolean=tinyint[1]
解决:tinyint类型长度的问题,当我把长度改成4时,查询结果就正常了
猜想并使用新的方法解决:
如果不改变类型的长度,怎么让查询的结果正确呢?需要在查询语句上面做修改了
在你需要执行的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
相关文章
- MYSQL数据库类型与JAVA类型对应表
- Mycat(4):消息表mysql数据库分表实践
- mysql数据库中,查看某个数据库下的表的存储类型都有哪些
- MySQL查询Employee表第二高的薪水
- MySQL实战系列2:你不可不知的数据库操作
- Mysql数据库表复制操作语句
- 考前复习必备MySQL数据库(关系型数据库管理系统)
- mysql数据库备份--java代码
- Linux安装Mysql(图文解说详细版)
- 【Docker】安装Presto连接Hive、mysql、oracle、postgresql、SQL server等7种类型数据库
- MySQL 数据库设计 笔记与总结(1)需求分析
- MySql 死锁时的一种解决办法
- (数据科学学习手札51)用pymysql来操控MySQL数据库
- Python MySQL 数据库连接不同方式
- MySQL慢查询 - 开启慢查询
- Mysql的用户管理与权限管理
- 首次启动mysql服务,设置root账户密码,mysql5.1免安装版
- 【MySQL】15-超详细MySQL日期类型函数总结
- Mysql数据库远程授权
- 数据库原理及MySQL应用 | 约束
- Java使用JDBC连接随意类型数据库(mysql oracle。。)
- (0.2.2)如何下载mysql数据库(二进制、RPM、源码、YUM源)
- docker 的centos容器搭建javaweb环境时mysql部分遇到的问题
- mysql数据库表设计小数类型