本文转载自CSDN博主「韩某Hyman」的原创文章,仅为学习使用。
原文链接:https://blog.csdn.net/qq_35383263/article/details/81281961
mysql设置字段的默认值分三种:
- 空值,空白,即什么都不填,等同于NULL(设计表结构时保存空值会自动变成NULL),当然也可以手动输入默认值。
- NULL。
- Empty String,空字符串,可以理解为0字节长度的字符串,等同于单引号''和双引号""。
1、NULL是占用磁盘空间的(并不是数据本身占用空间,而是存储它是否为NULL的标记占用1个字节),而空字符串''是不占用磁盘空间的(它的长度是0字节所以不占用)。
网上找到的相关资料显示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。
即:定义字段类型时,如果允许为NULL,那么就要为每条数据多分配一个字节的空间来表示字段是否为NULL。
直接在mysql中验证即可:
2、字段类型是varchar时可以默认为空字符串,字段类型是int时不可以默认为空字符串,可以设置为0。
3、当字段被设置为not null时,字段就不能是NULL但可以插入空字符串,但空字符串只能插入到字符串类型的字段中,插入其他类型的字段中会报错。而NULL可插入到任何允许为NULL的字段中。
4、SQL语句中对空字符串进行判断时可以使用=、>、<符号;但是对NULL进行判断时必须使用is null或is not null。
5、包含NULL的字段列,如果在查询条件中使用is not null会导致索引失效,但是使用is null索引不会失效。
6、使用count()函数进行统计时,会过滤掉NULL值,但不会过滤掉空字符串。