MySQL默认值NULL、空值、Empty String的区别,哪个更好?

一套完美的系统,离不开数据库的设计。

当我们数据库添加一个新的字段的时候,你会设置默认值为NULL,空值、还是Empty String呢?

首先我们来看下这三种值的介绍

  1. 空值,空白,即什么都不填,等同于NULL(设计表结构时保存空值会自动变成NULL),当然也可以手动输入默认值。
  2. NULL。
  3. Empty String,空字符串,可以理解为0字节长度的字符串,等同于单引号''和双引号""。

首先我们了解下not null 的好处:

1.节省空间

NULL 列需要更多的存储空间:需要一个额外字节作为判断是否为 NULL 的标志位。

2.空指针

查询时,可以在一定程度上减少 NullPointerException。

3.减少因为空值而出现的计算错误

如果有 Null column 存在的情况下,count(NULL column) 需要格外注意,NULL 值不会参与统计。

设置为null的坏处:

1.索引

含有空值的列很难进行查询优化,而且对表索引时不会存储 NULL 值的。所以如果索引的字段可以为 NULL值,索引的效率会下降。因为它们使得索引、索引的统计信息以及比较运算更加复杂。

应该用0、一个特殊的值或者一个空串代替 NULL值。

2.使用 != ,NOT IN 的情况

NOT IN 、!= 等负向条件查询在有 NULL 值的情况下,返回永远为空结果,查询容易出错。

3.占空间

NULL是占用磁盘空间的(并不是数据本身占用空间,而是存储它是否为NULL的标记占用1个字节),而空字符串''是不占用磁盘空间的(它的长度是0字节所以不占用)。

4.统计出现问题

使用count()函数进行统计时,会过滤掉NULL值,但不会过滤掉空字符串。

5.不利于查询

SQL语句中对空字符串进行判断时可以使用=、>、<符号;但是对NULL进行判断时必须使用is null或is not null。

综上:

建议不要使用NULL或空值,String类型的字段可以设置默认为Empty String(即空字符串''),Int类型的字段可以设置默认为0。

posted @ 2024-03-15 13:56  路三千  阅读(2679)  评论(0)    收藏  举报