如何处理Oracle将空字符串作为null存储在数据库中的情况?
我希望它存储为空字符串,因为它不是NULL,因为发出查询会更容易。
下面的代码将选择空字符串和非空字符串,但不会选择空值
select * from mytable where myfield like '%';如果我还想选择空值(最初应该是空字符串),我必须像这样选择:
select * from mytable where myfield like '%' or myfield is null;我希望以后在我的sql语句中一直跳过or myfield is null操作。
我考虑的当前解决方案是在应用程序级别处理此问题,例如,在实体中,我将所有字符串字段的默认值初始化为一个空格,例如:
@Entity
public class MyEntity {
private String name = " ";
public void setName(String name) {
if (isEmptyString(name)) {
name = " ";
}
}
...
}或者,我可以使用Oracle 11g中一种我还不知道的新类型,它可以保持空字符串的原样,而不会将其更改为空值。
谢谢!
发布于 2011-04-01 16:08:20
是的,这就是Oracle的工作方式。空字符串被视为空值。
当然,您可以在应用程序级别“修复”这个问题--例如,按照您的建议存储" "值--但首先要考虑的是,与NULL值相比,“空字符串”值到底有什么不同?为什么需要以不同的方式对待它们?我过去也曾遇到过这种困境,但我通常会发现,真正需要区分的情况很少。
发布于 2011-04-01 16:08:08
不,没有办法将空字符串视为空字符串。Oracle始终将长度为零的字符串视为空值。
发布于 2011-10-20 16:38:42
它不仅涉及到带有特殊where条件的选择,还涉及到对Java String对象的处理。如果你有一个字符串长度“”,你可以调用它的a=方法并得到0。如果你有一个字符串长度,你会在调用a=null时得到一个空指针异常。因此,使用oracle db会强制您在检查长度之前始终检查字符串是否为null :(
https://stackoverflow.com/questions/5510509
复制相似问题