programing

Java/JPA 프로그래머의 빈 문자열을 NULL 문제로 처리하는 Oracle

closeapi 2023. 8. 29. 20:39
반응형

Java/JPA 프로그래머의 빈 문자열을 NULL 문제로 처리하는 Oracle

Oracle이 빈 문자열을 데이터베이스에 null로 저장하는 이 상황을 어떻게 처리합니까?

쿼리를 발행하는 것이 더 쉬울 것이기 때문에 NULL이 아닌 빈 문자열로 저장했으면 합니다.

이와 같은 경우 빈 문자열과 비어 있지 않은 문자열을 선택하지만 null 값은 선택하지 않습니다.

select * from mytable where myfield like '%';

null 값(원래 빈 문자열이어야 함)도 선택하려면 다음과 같이 선택해야 합니다.

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

나는 하는 것을 건너뛰고 싶습니다.or myfield is null항상 나중에 sql 문에서

현재 제가 염두에 두고 있는 솔루션은 애플리케이션 수준에서 이 문제를 해결하는 것입니다. 예를 들어 엔티티에서 모든 문자열 필드 기본값을 공백으로 초기화합니다. 예를 들어 다음과 같습니다.

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

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

}

아니면 아마도, 빈 문자열을 null 값으로 변경하지 않고 그대로 유지할 수 있는 Oracle 11g의 새로운 유형을 사용할 수 있을까요?

감사해요!

네, 이것이 Oracle의 기능 방식입니다.빈 문자열은 null로 처리됩니다.

물론 애플리케이션 레벨에서 이 문제를 "수정"할 수 있습니다. 예를 들어, 저장을 통해" "당신이 제안한 대로의 값들 - 하지만 먼저, 당신의 "빈 문자열" 값들과 비교했을 때 정확히 무엇이 다른지 고려하세요.NULL가치관?왜 그들을 다르게 대해야 합니까?저도 이런 딜레마에 빠지기 일쑤였지만, 대개는 제가 정말로 차이점을 구별해야 하는 경우가 거의 없다는 것을 알게 되었습니다.

아니요, 빈 문자열을 빈 문자열로 처리할 수 없습니다.Oracle은 길이가 0인 문자열을 항상 NULL 값으로 처리합니다.

이것은 특별한 조건을 가진 선택일 뿐만 아니라 Java String Objects의 처리이기도 합니다.문자열 a="가 있으면 길이 메소드를 호출하여 0을 얻을 수 있습니다.String a= 모듈이 있으면 길이를 호출할 때 null 포인터 예외가 발생합니다.따라서 Oracle db로 작업하면 길이를 확인하기 전에 문자열이 null인지 항상 확인해야 합니다.

해라

create index idx_myfield on mytable(nvl(myfield,-1));

select * from mytable where nvl(myfield,-1)=-1;

저는 아직 이르지만, 그렇지 않나요?

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

와 같은

select * from mytable

따라서 Oracle은 사용자의 삶을 단순화합니다! ;)

Belive Oracle이 빈 문자열을 NULL로 변환하여 데이터베이스를 최적화하고 있습니다. 먼저 빈 문자열을 데이터베이스 저장소에 데이터 블록 수준(*1)으로 명시적으로 저장해야 할 수 있습니다.NULL로 저장하면 데이터 스토리지 설치 공간이 줄어들 수 있습니다.둘째, 열에 인덱스가 정의된 경우 NULL 값이 인덱스에 포함되지 않으므로 인덱스 스토리지 설치 공간이 줄어듭니다(*2).

설계 및 개발 관점에서 빈 공간이 실제로 데이터의 의미를 변경하지 않는 한 NULL로 저장하는 것은 문제가 없습니다.

위에서 제안한 것처럼 프레임워크 수준(또는 부모 클래스)에서 코드를 추가하면 모든 자식 클래스와 객체에서 코드를 입력할 필요가 없어집니다. 이것이 객체 지향 및 기본 프로그래밍이 시도하는 것입니다.

데이터베이스 스토리지가 최적화되어 있기 때문에 코드가 최상의 성능을 발휘하는 경우에는 만족해야 합니다.타이핑을 조금 아끼고 싶거나 마스터 설계/개발에 실패했다는 이유만으로 코드 성능이 프로덕션에서 저하되는 경우는 최악입니다.

Oracle이 저를 위해 비밀리에 최적화해 주신다면 매우 기쁠 것입니다.

Oracle NULL에 대한 모든 정보:

NULL은 특수 값입니다.NULL은 자체를 포함한 어떤 것과도 동일하지 않습니다. 즉 NULL은 NULL과 동일하지 않습니다.

언급URL : https://stackoverflow.com/questions/5510509/oracle-treating-empty-string-as-null-problem-for-a-java-jpa-programmer

반응형