Mysql数据库是一个基于结构化数据的开源数据库。SQL语句是MySQL数据库中核心语言。不过在MySQL数据库中执行SQL语句,需要小心两个陷阱。

陷阱一:空值不一定为空

空值是一个比较特殊的字段。在MySQL数据库中,在不同的情形下,空值往往代表不同的含义。这是MySQL数据库的一种特性。如在普通的字段中(字符型的数据),空值就是表示空值。但是如果将一个空值的数据插入到TimesTamp类型的字段中,空值就不一定为空。此时为出现什么情况呢

我先创建了一个表。在这个表中有两个字段:User_id(其数据类型是int)、Date(其数据类型是TimesTamp)。现在往这个表中插入一条记录,其中往Date字段中插入的是一个NULL空值。可是当我们查询时,其结果显示的却是插入记录的当前时间。这是怎么一回事呢?其实这就是在MySQL数据库中执行SQL语句时经常会遇到的一个陷阱:空值不一定为空。在操作时,明明插入的是一个空值的数据,但是最后查询得到的却不是一个空值。

在MySQL数据库中,NULL对于一些特殊类型的列来说,其代表了一种特殊的含义,而不仅仅是一个空值。对于这些特殊类型的列,各位读者主要是要记住两个。一个就是笔者上面举的TimesTamp数据类型。如果往这个数据类型的列中插入Null值,则其代表的就是系统的当前时间。另外一个是具有auto_increment属性的列。如果往这属性的列中插入Null值的话,则系统会插入一个正整数序列。而如果在其他数据类型中,如字符型数据的列中插入Null的数据,则其插入的就是一个空值。

陷阱二:空值不一定等于空字符

在MySQL中,空值(Null)与空字符(’’)相同吗?答案是否定的。

在同一个数据库表中,同时插入一个Null值的数据和一个’’空字符的数据,然后利用Select语句进行查询。显然其显示的结果是不相同的。从这个结果中就可以看出,空值不等于空字符。这就是在MySQL中执行SQL语句遇到的第二个陷阱。在实际工作中,空值数据与空字符往往表示不同的含义。数据库管理员可以根据实际的需要来进行选择。如对于电话号码等字段,可以默认设置为空值(表示根本不知道对方的电话号码)或者设置为空字符(表示后来取消了这个号码)等等。由于他们在数据库中会有不同的表现形式,所以数据库管理员需要区别对待。笔者更加喜欢使用空值,而不是空字符。这主要是因为针对空值这个数据类型有几个比较特殊的运算字符。如果某个字段是空字符,数据库中是利用字段名称来代替。相反,如果插入的是空值,则直接显示的是NULL。这跟其他数据库的显示方式也是不同的。

一是IS NULL 和IS NOT NULL关键字。如果要判断某个字段是否含用空值的数据,需要使用特殊的关键字。其中前者表示这个字段为空,后者表示这个字段为非空。在Select语句的查询条件中这两个关键字非常的有用。如需要查询所有电话号码为空的用户(需要他们补充电话号码信息),就可以在查询条件中加入is not null关键字。

二是Count等统计函数,在空值上也有特殊的应用。如现在需要统计用户信息表中有电话号码的用户数量,此时就可以使用count函数、同时将电话号码作为参数来使用。因为在统计过程中,这个函数会自动忽略空值的数据。此时统计出来的就是有电话号码的用户信息。如果采用的是空字符的数据,则这个函数会将其统计进去。统计刚才建立的两条记录时,系统统计的结果是1,而不是2。可见系统自动将Null值的数据忽略掉了。

判断NULL用is null  或者 is not null。 sql语句里可以用ifnull函数来处理

判断空字符串‘’,要用 ='' 或者 <>''。sql语句里可以用if(col,col,0)处理,即:当col为true时(非null,及非'')显示,否则打印0

mysql设置空值显示null_mysql的空值与NULL的区别相关推荐

  1. 关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别

    一.背景 根据业务需求,发现以前的同事在设计表的时候,很多字段都没有设置默认值.在mysql5.7版本之后,没有设定默认值的字段,在严格模式下是很容易报错的,所以我这边需要先给每个字段加上一个默认值. ...

  2. mysql char null_关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别...

    一.背景 根据业务需求,发现以前的同事在设计表的时候,很多字段都没有设置默认值.在mysql5.7版本之后,没有设定默认值的字段,在严格模式下是很容易报错的,所以我这边需要先给每个字段加上一个默认值. ...

  3. mysql设置数据库显示汉字_在CMD中操作mysql数据库出现中文乱码解决方案

    百度了一下..有说将cmd字符编码用chcp命令改为65001(utf8字符编码),可这样之后根本无法输入中文,查询出的中问结果依旧乱码 . 其实,只要保证cmd客户端和MySQL两者编码一致即可. ...

  4. mysql设置text字段为not null,并且没有默认值,插入报错:doesn't have a default value

    一.问题描述 在往数据库写入数据的时候,报错: '字段名' doesn't have a default value 本来这个错误是经常见到的,无非就是字段没有设置默认值造成的.奇怪的是,我这边报错的 ...

  5. mysql 设置一个字段为null_MySQL中,为什么要设置NOT NULL?

    有情怀,有干货,微信搜索[荒古传说]关注这个不一样的程序员. 平时开发过程中,MySQL 字段的一般都会设置为NOT NULL,你有想过为什么吗??? 原因如下: 1.空值("") ...

  6. Mysql中空字符''和空值null的区别

    一直都知道mysql中空字符串(")和空值(null)之间有区别,但是没好好研究过.直到项目上,这两个概念被我搞混了之后才想起来研究一下. 根据网上的说法,空字符串(")是不占用空 ...

  7. sql语句 如果为空值显示为0

    场景:列之间相加起来,结果发现加和列为空: 解决:设想其中的列可能是有空值,影响总体的列之和 方法:给列加判断如果为空值显示为0 根据数据库的不同,采用如下不同的方法: oracle 将空值返回0用如 ...

  8. mysql两个字段相减_MySQL 中NULL和空值的区别?

    作为后台开发,在日常工作中如果要接触Mysql数据库,那么不可避免会遇到Mysql中的NULL和空值.那你知道它们有什么区别吗? 学不动了,也不想知道它们有什么区别.大兄弟,不行啊,要面试! 前些天我 ...

  9. laytpl语法_浅谈laytpl 模板空值显示null的解决方法及简单的js表达式

    浅谈laytpl 模板空值显示null的解决方法及简单的js表达式 laytpl 模板语法 {{ d.field }} 输出一个普通字段,不转义html 官方的说明 但d.field 为空时会显示nu ...

最新文章

  1. mysql 半同步复制_Mysql半同步复制原理及问题排查
  2. python基础代码-python基础代码
  3. 格式化输出--对齐及补全
  4. 用matlab编程简单电子琴,基于MATLAB的数字信号发生器及简易电子琴设计论文.doc...
  5. AT3955-[AGC023D]Go Home【结论,递归】
  6. mysql utf8mb4 造成慢_mysql使用utf8mb4经验吐血总结
  7. Pc端微信加群的测试用例
  8. 狸猫换太子--删除无头单链表中结点
  9. 为什么 jsp 还没有淘汰?
  10. Electron 使用Widevine CDM插件
  11. Tianchi big data competition天池大数据挑战(CV场)
  12. 利用Excel批量快速发送电子邮件
  13. C++横板格斗小游戏(基于Easyx图形库)
  14. atomic头文件编译_c++11 多线程(3)atomic 总结
  15. MacCormack差分格式的全局误差分析
  16. 电子书chm转换html,chm转换为html的超简单方法
  17. 自定义桌面launcher-android
  18. WFP 样式(复习用)
  19. 探花交友_第7章-完善消息功能以及个人主页
  20. CentOS 7 查询CPU、内存、磁盘的使用情况

热门文章

  1. 国内各地图API坐标系统比较与转换
  2. 计算机网络及应用的说课稿,第一课计算机网络及应用说课稿
  3. 惊呆!骑士一天收入过万?顺丰同城回应:用户打赏约7856元
  4. Redmi K50 Pro未发先火 卢伟冰:压力好大
  5. 近4年个人收款码数据将被追查补税?微信、支付宝紧急回应了
  6. 李子柒被坑,大厂生气了!字节跳动火速对杭州微念启动撤资
  7. 罗永浩“真还传”再出番外篇,被执行1800万,交个朋友回应来了…
  8. 集五福开奖啦!六年累计7亿人参加 今年你中了多少?
  9. 手机变身车机导航遥控器 高德地图上线手车互联新功能
  10. 雷军谈小米10的3999元起售价:定价比华为苹果厚道