• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL null与not null和null与空值''''的区别详解

    相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问:

    带着上面几个疑问,我们来深入研究一下null 和 not null 到底有什么不一样。
    首先,我们要搞清楚“空值” 和 “NULL” 的概念:

        “NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”

    打个比方来说,你有一个杯子,空值代表杯子是真空的,NULL代表杯子中装满了空气,虽然杯子看起来都是空的,但是区别是很大的。

    搞清楚“空值”和“NULL”的概念之后,问题基本就明了了,我们搞个例子测试一下:

    CREATE TABLE `test` ( 
     `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , 
     `col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL 
    ) ENGINE = MYISAM ; 
    
    

    插入数据:

    INSERT INTO `test` VALUES (null,1); 
    

    mysql发生错误:

    #1048 - Column 'col1' cannot be null

    再来一条

    INSERT INTO `test` VALUES ('',1); 

    成功插入。

    可见,NOT NULL 的字段是不能插入“NULL”的,只能插入“空值”,上面的问题1也就有答案了。

    对于问题2,上面我们已经说过了,NULL 其实并不是空值,而是要占用空间,所以mysql在进行比较的时候,NULL 会参与字段比较,所以对效率有一部分影响。
    而且B树索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。

    我们再向test的表中插入几条数据:

    INSERT INTO `test` VALUES ('', NULL); 
    INSERT INTO `test` VALUES ('1', '2'); 
    

    现在表中数据:

    现在根据需求,我要统计test表中col1不为空的所有数据,我是该用“> ''” 还是 “IS NOT NULL” 呢,让我们来看一下结果的区别。

    SELECT * FROM `test` WHERE col1 IS NOT NULL
    
    

    SELECT * FROM `test` WHERE col1 > ''
    

    可以看到,结果迥然不同,所以我们一定要根据业务需求,搞清楚到底是要用那种搜索条件。

    MYSQL建议列属性尽量为NOT NULL

    长度验证:注意空值的''之间是没有空格的。

    mysql> select length(''),length(null),length(' ');
    
    +------------+--------------+--------------+
    
    | length('') | length(null) | length(' ') |
    
    +------------+--------------+--------------+
    
    | 0 | NULL | 2 |
    
    +------------+--------------+--------------+
    
    

    注意事项:

    到此这篇关于MySQL null与not null和null与空值''''的区别详解的文章就介绍到这了,更多相关MySQL null与not null 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 为什么mysql字段要使用NOT NULL
    • 解决mysql使用not in 包含null值的问题
    • 解决从集合运算到mysql的not like找不出NULL的问题
    • MySQL中建表时可空(NULL)和非空(NOT NULL)的用法详解
    • MySQL中NOT IN填坑之列为null的问题解决
    • MySQL中可为空的字段设置为NULL还是NOT NULL
    • MySQL查询空字段或非空字段(is null和not null)
    • mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
    • MySQL非空约束(not null)案例讲解
    上一篇:MySQL数据操作-DML语句的使用
    下一篇:解决Navicat Premium 连接 MySQL 8.0 报错1251的问题分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL null与not null和null与空值''''的区别详解 MySQL,null,与,not,和,空值,