zoukankan      html  css  js  c++  java
  • MySQL数据库中tinyint类型字段读取数据为true和false

    今天遇到这么一个问题,公司最近在做一个活动,然后数据库需要建表,其中有个字段是关于奖励发放的状态的字段,结果读取出来的值为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的枚举字段,使用的使用需要慎重考虑,避免带来不必要的麻烦

  • 相关阅读:
    如何清除el-dialog中的表单验证
    购物车小球飞入动画
    node的应用场景
    如何在Ubuntu Server 18.04 LTS中配置静态IP地址
    在Ubuntu上启用和禁用NetworkManager
    gcc常用命令
    cmake入门
    模拟实现pwd命令
    模拟实现ls命令
    qmake生成的Makefile在make install时遇到的一次错误
  • 原文地址:https://www.cnblogs.com/zengguowang/p/6116726.html
Copyright © 2011-2022 走看看