问题背景

这里有一张表,只有一个字段status

t_mysql_tinyint

表中数据如下:

data

status在业务逻辑中可能出现以下几种情况:

1:表示对象正常使用

2:表示对象已过期

0:表示对象已被删除

在MVC模式下,写sql语句操作数据库:

一般情况下,我们会用Page,List或Map封装执行sql后的数据用于业务操作。

public Page findPageListMap(final String sql,Page page,Object... arrayParameters);

public List> findUniqueMapByArray(final String sql, Object... arraryParameters);

public Map findUniqueMapByArray(final String sql, Object... arrayParameters);

问题描述

当在ServiceImpl我们进行数据操作时:

public Page getStatusReturnPage() {

String sql = "select status from t_mysql_tinyint";

return baseDao.jdbcTemplate.findPageListMap(sql,page);

}

public List> getStatusReturnList() {

String sql = "select status from t_mysql_tinyint";

return baseDao.jdbcTemplate.findUniqueMapByArray(sql,page);

}

public MapgetStatusReturnMap() {

String sql = "select status from t_mysql_tinyint";

return baseDao.jdbcTemplate.findUniqueMapByArray(sql);

}

在Controller中分别调用三个方法

status1 = status.getStatusReturnPage();

status2 = status.getStatusReturnPage();

status2 = status.getStatusReturnPage();

System.out.print("status1: " + status1 + "\nstatus2: " + status2 + "\nstatus3: " + status3 );

打印出来的结果是 status1:2,status2:2,status3:true

这就有点奇怪了,Map返回的值竟然是布尔型!!

问题分析与解决

症状:

使用MySqlClient访问tinyint unsign 字段返回布尔值 true 和 false,但是实际上该字段存储值为1-255分析:

由于在Mysql中没有布尔类型值,MySqlClient在访问tinyint类型字段时默认作为布尔值使用。

解决:

1.在连接串中增加 Treat Tiny As Boolean=false 配置.

2.对应字段在SQL语句中*1,这样,读取出的字段值默认会被转换成int类型.

3.如果不是仅存取true和false,建议设计时使用int.

相关资料:

根据官方文档 10.1.1. Overview of Numeric Types ,在 MySql 中还没有严格的 bool 类型,但使用 TINYINT(1) 隐式用作 bool 类型,零作为false,而非零值(包括负数)作为true。但,这是不对称的。在执行逻辑比较时,true 等于 1,false 等于 0,但 true 不等于 2。这个文档显示的 MySql 5.0,其他后续版本是否有严格的 bool 类型未知。

在 MySql Connector/Net 中,遵循了上面这个约定,假如某个字段类型是 tinyint(1),则会被自动映射成 Boolean 类型。如果要禁用这个映射,可以在连接字符串中,配置 Treat Tiny As Boolean=false。这个选项的默认值是 true。参考 21.2.6. Connector/NET Connection String Options Reference 。没有查到这个选项从 Connector/Net 哪个版本开始支持,应该是 Connector/Net 5.x 之后都支持。

mysql如果有值返回true_关于mysql的tinyint字段调用返回true/false的问题相关推荐

  1. mysql更改表 值_如何更改MySQL表中行实例的值?

    UPDATE命令以及WHERE子句可用于更改行实例的值.基本上,MySQL将根据查询中给出的条件更改值.下面的例子可以证明它 假设我们想在下面给出的"测试"表中将名称从" ...

  2. mysql jpa默认值_java – Spring JPA – 枚举中枚举字段的默认值

    我们有一个带有枚举字段的实体 – emailCommunicationStatus,我们想要使用JPA注释为其设置默认值 – 'UNKNOWN'. 但是,当我们将实体保存到DB时,此字段的值为null ...

  3. mysql 计算差值_Prometheus + Granafa 构建MySQL监控平台

    来源:https://blog.51cto.com/xiaoluoge/2476375 作者:小罗ge11 概述 对于MySQL的监控平台,相信大家实现起来有很多了:基于天兔的监控,还有基于zabbi ...

  4. mysql怎么把值更新成space,MySQL表的碎片整理和空间回收小结

    MySQL表碎片化(Table Fragmentation)的原因 关于MySQL中表碎片化(Table Fragmentation)产生的原因,简单总结一下,MySQL Engine不同,碎片化的原 ...

  5. 易语言mysql怎么写字段值_易语言数据库怎么加字段 数据库添加字段说明

    易语言将access数据库作为数据源怎么添加记录到access? .版本 2 .支持库 eDB 数据库连接1.连接Access (取运行目录 () + "数据库名称", " ...

  6. 让mysql中行的值拼接_在MySQL中行值包含字符串的SELECT?

    要在MySQL中选择包含字符串的行值,请使用以下语法.SELECT *FROM yourTableName where yourColumnName like '%yourPattern%'; 为了理 ...

  7. mysql 自动递增值归零_修改MySQL自动递增值

    [转] Jenkins实战演练之Windows系统节点管理 [前提] 通过(http://my.oschina.net/iware/blog /191818)和 NK3C框架(MyBatis.Duri ...

  8. 【MYSQL 按照固定值进行排序 order by field()】

    MYSQL 按照固定值进行排序 总结 #MySQL中 order by 自定义值排序 mysql 原有的排序方式:当排序的字段未int类型的时候,咱们可以直接 order by num: mysql ...

  9. mongo 查询显示字段_MongoDB查询指定字段(field)返回指定字段的方法

    使用MongoDB的时候需要只查询指定的字段进行返回,也就是类似mysql里面的 SELECT id,name,age 这样而不是SELECT *.在MongoDB里面映射(projection)声明 ...

最新文章

  1. ASP.NET MVC + ECharts图表案例
  2. Echarts组件 tooltip提示formatter函数
  3. step1 . day7 C语言基础练习之指针和函数
  4. 工业机械类企业官网织梦模板源码
  5. Ubuntu 设置网卡固定IP
  6. 冤冤相报何时了?奥克斯、格力再互怼,“周一见”
  7. 测试化验加工费云服务器文献信息,监管▕ 科研经费使用中的 “红线”和“禁区”典型问题自查清单...
  8. php redis sorted set,Redis 有序集合(sorted set)
  9. java连接数据库的详细步骤?
  10. 树莓派 opencv 调用摄像头
  11. win10任务栏透明_5 款 Windows 任务栏增强工具推荐
  12. 4.2 metasploit 开发 exploit
  13. 聊聊IT外包公司(外包公司的运作模式和赚钱之道)
  14. Python爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗
  15. Preparatory Class-Day8------函数
  16. 【b302】侦探推理
  17. 【杂题】cf1041fF. Ray in the tube
  18. 前后端分离校园智能出行拼车系统
  19. BZOJ 4407于神之怒加强版
  20. 前端下载文件(二进制文件流brob和url下载)

热门文章

  1. Android 10 去掉系统默认谷歌输入法
  2. npm ERR! code ETIMEDOUTnpm ERR! errno ETIMEDOUTnpm ERR! network request to http://nexus.h3yun.com:
  3. Mac OS 脚本生成dmg安装文件
  4. 比Visio牛逼的流程图工具,Visio替代品!
  5. 我的读书笔记——Paralled Scavenge 收集器
  6. HDU 2036 改革春风吹满地 (求多边形面积)
  7. 【详细说明】二代身份证号码的组成结构(含校验码算法与行政区划代码)
  8. NVDLA学习笔记(2)
  9. 基于AnimeGAN模型生成宫崎骏风格动漫照片
  10. IDEA Maven 依赖分析插件Maven Helper