本文基于Mysql5.7版本的参考资料:

https://dev.mysql.com/doc/refman/5.7/en/working-with-null.html

https://dev.mysql.com/doc/search/?d=12&p=1&q=null+empty+string

https://dev.mysql.com/doc/refman/5.7/en/static-format.html

https://dev.mysql.com/doc/refman/5.7/en/dynamic-format.html

昨天新建一个表用于存储表结构信息:

create table tablist(TABLE_SCHEMA varchar(40),TABLE_NAME varchar(40),COLUMN_NAME varchar(40),COLUMN_TYPE varchar(40),
IS_NULLABLE varchar(10),COLUMN_DEFAULT varchar(40),COLUMN_COMMENT varchar(1000),REMARK varchar(2000)); insert into tablist(TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,COLUMN_COMMENT)
select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,COLUMN_COMMENT
from information_schema.`COLUMNS` where TABLE_SCHEMA='leo';

然后查询tablist表:

看看有哪些列没有comment于是:

select * from tablist where COLUMN_COMMENT is null;

查到的结果居然是Empty set。不过从以上查询结果和navicat都能看出:null值在结果集中显示的是'null'的单词,而空字符串则显示为空。

使用select * from tablist where COLUMN_COMMENT='';查询正常。

在MySQL中NULL值和空字符''是不一样的,这点可能会引起很多新人的困惑,因此查询官网相关的页面总结如下:

  • 两者的查询方式不一样:NULL值查询使用is null/is not null查询,而empty string可以使用=或者!=、<、>等算术运算符,这点算是最主要的区别了。

以下列出的几点算不上区别,只是一些NULL和空字符的使用总结:

  • 在MySQL当中,0和NULL默认可以作为布尔类型的false,任意其他值可以用于表示True,不过一般用1作为True的默认布尔值。
  • 在MySQL当中,NULL值在group by、order by、distinct语句中被认为是相等的,会被分在同一组。
  • 对于MySQL的unique index来说,null值是可以存在多个的,也就是说unique index不会过滤null值。
  • 在MySQL当中,使用order by对包含NULL值的列排序,NULL值会默认排在前边,order by ... desc时排在最后。
  • 同Oracle、MSSQL一样你可以在包含NULL值的列上创建索引,但仅限于MyISAM, InnoDB和MEMORY存储引擎。
  • 默认情况下LOAD DATA会把空字符或缺失字段全部设置为空字符。如果想要插入NULL值请使用\N,在某些特殊情况下也可以使用NULL字符,但需要设置正确的LOAD DATA语法项,参考https://dev.mysql.com/doc/refman/5.7/en/load-data.html
  • 在使用COUNT(), MIN(), and SUM()等函数时,NULL值会被忽略,当然count(*)除外。
  • 对于TIMESTAMP列,插入的NULL值会被CURRENT_TIMESTAMP替代。
  • 对于myisam引擎,null值占用额外的存储空间(1bit),空字符串则完全不占用空间。
  • 对于索引查询的影响,无论是NULL还是空字符目前的测试结果表明都没有太大区别,这点与oracle中is null的查询可能会导致全表扫描不一样。
  • 以上提到的关于NULL值的分组、聚合等,基本都适用于空字符。
在实际工作中建议将空值列全部设为NULL,而不是'',因为很多情况下null都会比空字符好处理,空字符还可能引发各种混淆。
此外关于空字符和NULL值对于索引的影响,可以参考https://www.cnblogs.com/leohahah/p/8425813.html

Mysql的NULL和Empty String的更多相关文章

  1. Mysql 数据库默认值选 ''" 、Null和Empty String的区别

    两者的查询方式不一样:NULL值查询使用is null/is not null查询,而empty string可以使用=或者!=.<.>等算术运算符,这点算是最主要的区别了. 对于myis ...

  2. Summary: Difference between null and empty String

    String s1 = ""; means that the empty String is assigned to s1. In this case, s1.length() i ...

  3. 'EF.Utility.CS.ttinclude' returned a null or empty string.

    需要安装https://www.microsoft.com/en-us/download/details.aspx?id=40762

  4. mysql default null empty string concat varchar text

    text不可设置默认值 null  empty string   前者update 初始值时 我响应,但不报错

  5. [shiro] Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.

    访问某页面时,出现了这个异常: java.lang.IllegalArgumentException: Wildcard string cannot be null or empty. Make su ...

  6. Check if a string is NULL or EMPTY using PowerShell

    http://techibee.com/powershell/check-if-a-string-is-null-or-empty-using-powershell/1889 Check if a s ...

  7. (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.

    访问某页面时,出现了这个异常: java.lang.IllegalArgumentException: Wildcard string cannot be null or empty. Make su ...

  8. (转)Java 中关于String的空对象(null) ,空值(empty),空格

    原文出处:Java 中关于String的空对象(null) ,空值(empty),空格 定义 空对象: String s = null; 空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例 ...

  9. Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty

    原文:Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty public class NullToEmptyStringResolver : De ...

随机推荐

  1. win32程序之窗口程序,以及消息机制

    win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...

  2. 【K8S】client-go、python-k8sclient开发K8S

    0x01 client-go 1.简介 Client-go是kubernetes官方发布的调用K8S API的golang语言包,可以用来开发K8S的管理服务.监控服务,配合前端展示,就可以开发出一款 ...

  3. eclipse team 没有svn

    从资源库把项目导出来之后 右键点击项目  选择第二个 出现 选择SVN  出现你资源库的地址  finish 完成. 这时项目就会出现地址了 就有提交了

  4. Socket网络编程基本介绍

    一,socket的起源 socket一词的起源 在组网领域的首次使用是在1970年2月12日发布的文献IETF RFC33中发现的, 撰写者为Stephen Carr.Steve Crocker和Vi ...

  5. Linux上磁盘热插拔

    首先获取scsi设备的信息. [root@server2 ~]# lsscsi [:::] disk VMware, VMware Virtual S 1.0 /dev/sda [:::] cd/dv ...

  6. MySQL系列详解八:MySQL多线程复制演示-技术流ken

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  7. camera测试之颜色还原

    测试目的:camera对色彩的还原能力 测试主要设备:24色色卡,灯箱 测试环境:1.D65/CW/A光源,照度为600±100lux,整个chart表面的亮度值相差小于10% 2.D65光源,照度为 ...

  8. Linux服务器GlashFish的Domain管理

    1.本文内容 Glassfish(V3.1)的Domain创建,删除,登陆,部署等 Linux客户端工具: SecureCRTPortable和 WinSCP (请自行下载) 2.1 新建Domain ...

  9. Java基础IO流(一)

    IO概念: 大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等.在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象 ...

  10. 雪碧图和如何实现浏览器中title的小图标

    background-position 雪碧图 我们的html和css中有三个属性可以向服务器发送请求 ser href url 2.overflow (1) 值hidden 超出就隐藏 (2)值sc ...