使用空字符串而不是null - 一个好习惯?

Com*_*ade 3 java database-design hibernate

例如在数据库中考虑:

CREATE TABLE users (
  id INTEGER IDENTITY PRIMARY KEY,
  last_name VARCHAR (50) DEFAULT '' NOT NULL,
  first_name VARCHAR (50) DEFAULT '' NOT NULL,
  email VARCHAR(50) DEFAULT '' NOT NULL)
Run Code Online (Sandbox Code Playgroud)

并考虑使用Hibernate作为ORM与该数据库交互的程序.

在我看来,这意味着:

  • 避免NullPointerExceptions
  • 避免检查空值

这是好习惯吗?请举例说明优缺点.

Nev*_*uyt 7

正如PeterMmm所写,"Null"具有特殊含义,并且通常由数据库引擎中的特殊运算符支持.

"良好实践"是那些意味着你想要它意味着什么的短语之一,但是稍微解开一下这些论点:

  • 可维护性:糟糕的主意.大多数开发人员习惯于在数据库系统中实现NULL,并且需要对您的设计进行特殊培训.

  • 容错:不好主意.如果不允许列为null,那通常意味着应用程序设计中的某些内容.如果用户记录必须有一个有效的电子邮件地址,您现在不能再在数据库级别验证这一点 - 因此您的数据库可能会逐渐填满虚假数据,并且您只会在尝试发送电子邮件时找到至 ''."空指针"异常是功能,而不是错误!

  • 性能:根据http://www.sql-server-performance.com/2007/datatypes/,NULL更慢.


Pet*_*Mmm 5

这取决于您的用例。null是一个特殊的值并且具有特殊的语义。您可以默认全部为空字符串,但将last_name设置为空字符串或null(姓氏未知或不适用)可能会非常不同(我知道,这是一个坏例子)。