java使用空字符串代替空字符串是一种好的做法吗?
例如在数据库中考虑:
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)
并考虑使用Hibernate作为ORM与数据库交互的程序。p>
我认为这意味着:
- 避免NullPointerException
- 避免检查空值的需要
这是好的做法吗?请举例说明利弊
# 1 楼答案
以我的经验,这不是一个好的做法。在需要的地方分配空值
# 2 楼答案
这取决于您的用例null is a special value and has a special semantic。您可以将all默认为空字符串,但姓氏为空字符串或null(姓氏未知或不适用)可能会非常不同(我知道,这是个糟糕的例子)
# 3 楼答案
好吧,缺点是你无法区分“我没有为这个字段输入任何内容”和空字符串。如果您不必担心空字符串,那就太好了。除非你的司机介绍他们。(我认为一些旧版本只是将空字符串转换为java
null
。)# 4 楼答案
正如Petermm所写,“Null”有一个特殊的含义,通常由数据库引擎中的特殊运算符支持
“良好实践”是一个短语,它的意思是你想表达的任何意思,但要稍微解开论点:
可维护性:坏主意。大多数开发人员已经习惯了在数据库系统中实现NULL的方式,并且需要在设计中接受特殊培训
容错:坏主意。如果一列不允许为null,这通常意味着应用程序设计中的某些内容。如果用户记录必须具有有效的电子邮件地址,则您现在无法再在数据库级别验证该地址-因此您的数据库可能会逐渐充满虚假数据,并且只有在尝试向“”发送电子邮件时才能发现。“空指针”异常是特性,不是bug
性能:根据http://www.sql-server-performance.com/2007/datatypes/,NULL速度较慢
# 5 楼答案
引用Django ORM docs:
因此,是的,最广泛使用的pythonweb框架考虑了您提出的最佳实践设计,并默认提供了这种行为。Java现在也在使用Java8{}来摆脱{},也许是时候从这个角度重新考虑我们的DB设计了