美文网首页
【mysql】关于枚举值 '1','0'的神奇判断

【mysql】关于枚举值 '1','0'的神奇判断

作者: 禟小九 | 来源:发表于2018-08-16 11:29 被阅读0次
背景与探索

最近在做一个简单的用户信息的查询及展示,其中在对用户性别判断的时候,出现了一个神奇的情况,首先数据库里有个表存储了性别字段 sex ,字段类型是:enum('0','1') DEFAULT NULL COMMENT '性别(0/女,1/男)'
整体表结构如下:

CREATE TABLE `user` (
  `userid` int(10) unsigned NOT NULL COMMENT '登录账号ID',
  `sex` enum('0','1') DEFAULT NULL COMMENT '性别(0/女,1/男)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='个人基础信息';

表中数据如下:


image.png

然后写了个简单的sql来判断男女,如下:

SELECT  userid,if(sex=1,'男','女') as '性别' from user
image.png

发现显示的结果跟数据库存储的是完全相反的,但是的第一反应是不是判断反了,结果反复核实了几遍并没有判断反,然后看数据库存储的字段是枚举,心里想着说是不是类型问题导致的,结果将sex=1改成sex=‘1’,结果就对了,sql如下:

SELECT  userid,if(sex='1','男','女') as '性别' from user
image.png
结论与总结

从上面的例子中我们知道,mysql对字符型的判断不能直接转换成数字,必须要跟对应的字符比较才能得到正确的结果,这个问题是平时很少注意到的问题,但是为什么当sex的值是'1'与1比较是false,sex值是'0'与1比较是true这个目前还没有搞清楚原理。

相关文章

  • 【mysql】关于枚举值 '1','0'的神奇判断

    背景与探索 最近在做一个简单的用户信息的查询及展示,其中在对用户性别判断的时候,出现了一个神奇的情况,首先数据库里...

  • C-枚举

    一.定义枚举类型 1.枚举语法定义格式: 2.枚举成员的值: 第一个枚举成员的默认值为整型的 0,后续枚举成员的值...

  • TypeScript 学习笔记 之 枚举与类型推断

    枚举 默认枚举属性的值为整型,且从0开始自动递增, 如下: 也可以指定值。如指定 Up = 1 ,以便枚举从1 开...

  • Swift底层探索:enum

    C enum C语言枚举格式 比如要表示星期几的枚举: 第一个枚举成员的默认值为0,依次加1。要改变枚举值直接赋值...

  • 枚举类

    1.枚举类型的定义: 枚举类型定义的一般形式为 enum 枚举名{//枚举值表枚举值1;枚举值2;...} 在枚举...

  • iOS·枚举变量在 未赋值/赋值为空 的情况下,默认值为0(即第

    枚举类型变量的赋值特性: 一个枚举类型如果没有赋初值,则默认值为0。 一个枚举类型如果赋值为nil,同样值为0。 ...

  • vue项目中枚举值统一维护管理

    由于多页面有时需要共同的表单枚举选择,页面以及table需要显示枚举值label以及有时需要根据枚举值判断,故个人...

  • Enum 枚举类型

    JS写法 枚举类型 写一个枚举类型 Status 默认情况下,枚举类型 从0开始,如果希望OFFLINE值是1,O...

  • C语言学习 - 枚举型数据类型

    枚举变量的定义 方式一Step 1:声明枚举类型:格式:enum 枚举类型名{枚举值1,...,枚举值n}如:en...

  • swift语法记录-之枚举

    枚举的基本用法 在C,OC中,枚举就是整形,0,1,2,3...在swift中的基本用法 关联值(Associat...

网友评论

      本文标题:【mysql】关于枚举值 '1','0'的神奇判断

      本文链接:https://www.haomeiwen.com/subject/zglnbftx.html