MySQL中可为空的字段设置为零还是不空

  

<强>经常用mysql的人可能会遇到下面几种情况:

  

1,我字段类型是不空,为什么我可以插入空值

  

2,为什么not null的效率比空高

  

3,判断字段不为空的时候,到底要用

        从表中列选择* & lt;比;" 之前      

还是要用

        select *从表列不是空      

带着上面几个疑问,我们来简单的研究一下零和not null到底有什么不一样,他们之间的区别是什么以及各自的效率问题。

  

<强>首先,我们要搞清楚“空值”和“空”的概念:

  

1,空值是不占用空间的

  

2, mysql中的空其实是占用空间的、下面是来自于mysql官方的解释

  
  

"空列需要额外空间行记录它们的值是否为空。MyISAM表,每个NULL列>   创建表“codetc”(   的col1 VARCHAR(10)字符集utf8核对utf8_general_ci非空,   col2 VARCHAR(10)字符集utf8核对utf8_general_ci NULL   )=MYISAM引擎;      

插入数据:

        插入“codetc”值(空1);      

mysql发生错误:

  

<代码> # 1048 -列col1”不能null 

  

再来一条

        插入codetc”值(1),      

成功插入。

  

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

  

对于问题2,上面我们已经说过了,空其实并不是空值,而是要占用空间,所以mysql在进行比较的时候,零会参与字段比较,所以对效率有一部分影响。

  

而且B树索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。

  

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

        插入“codetc”值(NULL);   插入“codetc”值(' 1 ',' 2 ');      

现在根据需求,我要统计codetc表中col1不为空的所有数据,我是该用“& lt;比;”“还是“不空”呢,让我们来看一下结果的区别。

        SELECT *从‘codetc col1不是零;      SELECT * FROM‘codetc col1 & lt;比;”;      

可以看的到,结果迥然不同,所以在实际情况中,我们一定要根据业务需求,搞清楚是否需要使用null或者不是零。

  

注意:MySQL字段尽量避免空,应该指定列不为NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,而且对表索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。因为它们使得索引,索引的统计信息以及比较运算更加复杂。你应该用0,一个特殊的值或者一个空串代替空值。

  

<强> mysql设置字段非空变成空

  

语句:         改变表的表名修改字段名VARCHAR(20)默认空      

 MySQL中可为空的字段设置为零还是不空”> </p>
  <p> <强>总结</强> </p>
  <p>以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接</p><h2 class=MySQL中可为空的字段设置为零还是不空