今天遇到这么一个问题,公司最近在做一个活动,然后数据库需要建表,其中有个字段是关于奖励发放的状态的字段,结果读取出来的值为true

一、解决读取数据为true/false的问题

场景:

  字段: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]

  关于tinyint[1]在官网里边有一段话:

  ?115,72005,72005

  Which would be the more optimzed way to store a boolean, TINYINT(1) or ENUM( 'true' , 'false')? It seems that when storing an enum w/ two settings should only take up one bit, 0 or 1, but would spend more time looking up the enums in the beginning of the query. tinyint(1) however would take up 4 bits assuming it ranged 0-9. So it seems if you just wanted to fetch the value, tinyint(1) would be faster, but if you are searching through lots of records enum('true','false') would be faster. Do you concur??

  翻译过来如下:

    TINYINT(1)或ENUM('真','假')?

    用ENUM枚举当存储只有2个值时只占用一个位的宽度,0或1,但会花更多的时间去寻找了枚举查询的开始。

    用TINYINT(1)默认就会占用4个位的宽度(0000)

    得出结论:

      比如要存储一个介于0-9之间的值,为了查询获取这个值,建议用TINYINT(1)会更快,

     但如果你是为了大量记录枚举(“真”,“假”),那么用ENUM( 'true' , 'false') 搜索会更快。

  所以由这里可以看出,当你使用tinyint[1]来存储超过0,1两个值以外的值,比如存储2,那这个2就是脏数据,tinyint[1]只适用于存储0和1两个值,也即真和假,true和false

  一般的,咱们如果存的是纯数字的话,建议用tinyint,如果是字符串,且是固定长度的,建议用char,而enum的枚举字段,使用的使用需要慎重考虑,避免带来不必要的麻烦

MySQL数据库中tinyint类型字段读取数据为true和false的更多相关文章

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

    数据库一个表中有一个tinyint类型的字段,值为0或者1,如果取出来的话,0会变成false,1会变成true. MySQL保存boolean值时用1代表TRUE,0代表FALSE.boolean在 ...

  2. MySQL数据库中tinyint字段值为1,读取出来为true的问题

    原文:https://blog.csdn.net/shuyou612/article/details/46788475 MySQL数据库中tinyint字段值为1,读取出来为true的问题   今天在 ...

  3. laravel如何从mysql数据库中随机抽取n条数据

    laravel如何从mysql数据库中随机抽取n条数据 一.总结 一句话总结: inRandomOrder():$userQuestions=UserQuestion::where($map)-> ...

  4. MySQL数据库中,将一个字段的值分割成多条数据显示

    本文主要记录如何在MySQL数据库中,将一个字符串分割成多条数据显示. 外键有时是以字符串的形式存储,例如 12,13,14 这种,如果以这种形式存储,则不能直接与其他表关联查询,此时就需要将该字段的 ...

  5. MSSQL数据库中Text类型字段在PHP中被截断之解 (转)

    在PHP中使用了MSSQL数据库,恰巧数据库中又使用了Text类型字段,于是问题产生了.每次从数据库中查询得到的数据总是被莫名的截断,一开始是以为我使用的PHP框架中对字符串的长度有所限制,后来发现这 ...

  6. 数据库中float类型字段,转化到前端显示,统一保留两位小数

    客户的一个需求,mybatis查询到的数据库的数据进行转换,采用TypeHandler<T>的方式.float保留两位精度可以采用DecimalFormat 直接贴上最终的解决代码(事情没 ...

  7. Java—JDBC向mysql数据库中给某个表添加数据时,会遇到的问题,如下

    解析(jar包该放在那里,以及其它的操作): 把jar包(驱动)添加到自己的项目中,最好新建一个文件夹,再把jar包(驱动包)添加到这个所新建的文件中 1.先建好自己的项目,再新建一个文件夹,如下: ...

  8. Python numpy插入、读取至postgreSQL数据库中bytea类型字段

    安装psycopg2模块,此模块用于连接PostgreSQL数据库 ​pip install psycopg2 # -*- coding: utf-8 -*- import psycopg2 impo ...

  9. mysql记录数据库中重复的字段的数据

    SELECT    SUM(co)FROM    (        SELECT            telephone,            count(telephone) AS co     ...

随机推荐

  1. curl命令行使用

    curl 命令使用   原文地址:http://blog.sina.com.cn/s/blog_4b9eab320100slyw.html 可以看作命令行浏览器 1.开启gzip请求curl -I h ...

  2. windows pip安装 更新

    升级: http://blog.csdn.net/liuchunming033/article/details/39578019 pip坏了如何重新安装: https://github.com/pyp ...

  3. BZOJ4078 : [Wf2014]Metal Processing Plant

    设$D(A)\leq D(B)$,从小到大枚举$D(A)$,双指针从大到小枚举$D(B)$. 那么对于权值不超过$D(A)$的边,可以忽略. 对于权值介于$(D(A),D(B)]$之间的边,需要满足那 ...

  4. BZOJ3252: 攻略

    Description 题目简述:树版[k取方格数]   众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景 ...

  5. 【清北学堂】 死亡(death)

    M个位置可以打sif,N+1个人等着打sif,已知前N个人的时间,问第N+1个人什么时候才能打sif(不能插队,即必须按顺序来打sif) 输入N,M以及每个人所需要的时间:输出第N+1个人所需的时间 ...

  6. [转载]C++堆栈的入门学习

    申明:   转自    http://www.cnblogs.com/pengshao/archive/2011/12/26/2301461.html 头文件stackDemo.h #pragma o ...

  7. FTP传输文件

    感谢其他技术人员的分享.我转发,添加个人使用. public class TransFTP {/// <summary> /// 上传文件 /// </summary> /// ...

  8. Netty In Action

    1 introduction 1.2 Asynchronous by design two most common ways to work with or implement an asynchro ...

  9. C#发送邮件时提示:“不允许使用邮箱名称。服务器响应为:”的错误解决办法

    由于项目需要,要为客户提供一个定期发送邮件的程序.本来原来自己还写过,但新写的程序一晚上也没通过测试,总是提示"不允许使用邮箱名称.服务器响应为..." 经过在网上搜索查找解决办法 ...

  10. CentOS7源码编译安装Postgresql9.5

    1.安装必要的基本软件 yum install -y gcc.x86_64 glibc.x86_64 glibc-devel.x86_64 vim-enhanced.x86_64 gcc-java a ...