Oracle 将空字符串视为 Java/JPA 程序员的 NULL 问题

2022-09-03 18:31:45

如何处理 Oracle 将空字符串存储为数据库中的 null 的情况?

我希望将其存储为空字符串,因为它不是NULL,因为发出查询会更容易。

类似这样的东西会选择空字符串和非空字符串,但不会选择 null 值

select * from mytable where myfield like '%';

如果我想选择空值(最初应该是空字符串),我必须像这样选择:

select * from mytable where myfield like '%' or myfield is null;

我很乐意跳过以后在我的sql语句中一直做or myfield is null

我心目中的当前解决方案是在应用程序级别中处理此问题,例如,在实体中,我将所有 String 字段默认值初始化为空格,例如:

@Entity
public class MyEntity {
  private String name = " ";

  public void setName(String name) {
    if (isEmptyString(name)) {
      name = " ";
    }
  }
  ...

}

或者,也许,我可以使用Oracle 11g中我仍然未知的新类型,该类型可以保持空字符串不变,而无需将其更改为空值?

谢谢!


答案 1

是的,这就是Oracle的工作方式。空字符串被视为空值。

您当然可以在应用程序级别“修复”此问题 - 例如,通过按照您的建议存储值 - 但首先要考虑,与值相比,“空字符串”值究竟有什么区别?为什么你需要区别对待他们?我也曾经遇到过这种困境,但通常发现很少有情况下我真的需要区分。" "NULL


答案 2

不,没有办法将空字符串视为空字符串。Oracle 始终将长度为零的字符串视为 NULL 值。


推荐