2014-10-21 2 views
2

Java에서 데이터를 검색 한 다음 오라클에 삽입합니다. oracle은 "" 값을 가져 와서 을 NULL로 변환합니다. 나는 "" 오히려 NULLOracle이 "NULL"로 변환합니다

이상을 기대하고

이 원하지 않는 행동이고, 나는 다시 오라클에서 검색 할 때이 문제가 발생, 나는 오라클 서버 측에 뭔가를 설정 우아한 해결책을 선호한다. 전역 설정이나 무언가 을 자바 코드에 수백만 가지의 if 문을 넣는 대신에 사용할 수 있습니다.

+1

불행히도 [이것은 Oracle의 기능입니다] (http://stackoverflow.com/q/13278773/1134080). 다르게 작동하는 PostgreSQL 또는 MySQL로 전환하는 것을 고려할 수 있습니다. – ADTC

+7

잘 알려진 사실 : Oracle *은 * 빈 문자열 *이 아니며 대신 NULL을 사용합니다. –

+0

@Pablo이 사이트의 대부분의 질문에 대해 같은 주제가 설명되어 있습니다. 왜 그런지 찾고 있지 않습니다. –

답변

3

의견에서 말했듯이, 당신이 그것에 관해 할 수있는 것은 아무것도 없습니다. 오라클은 NULL과 다른 빈 문자열을 처리하고 빈 문자열을 제공하면 NULL을 varchar2 열에 저장합니다.
정말로 뭔가를 가지고 싶다면 할 수있는 일은 하나의 공간을 대신 저장하십시오.

+0

'-' 해결책을 찾고 있는데 ''이 더 명확하지만 본질적으로 옳습니다. – OldCurmudgeon

+0

기다려 .. 뭐라구? –

+0

@ShishirKumar 그것은 오라클의 작동 방식입니다. 그리고 역사적으로 그것은 꽤 정확한 행동입니다. Forms 애플리케이션의 빈 입력 필드가 빈 문자열을 나타내거나 전혀 입력을 나타내지 않는다는 것을 데이터베이스가 어떻게 알 수 있습니까? – jwenting

1

빈 문자열은 Oracle에서 널값으로 처리됩니다.

같이, 널 (null)을 구별 할 수있는 솔루션은 null 값은 보통 피연산자 (= <> 등을 사용할 수 있다는 점에서 독특한 것을 염두에두고 & 빈 문자열입니다 값 위 말했다)을 Null 값으로 설정합니다.

대신 Oracle에서 null을 확인하려면 IS NULLIS NOT NULL 조건을 사용해야합니다.

또한, 빈 공백으로 열을 가지고있는 레코드를 선택하려면 이지만이 아닌 빈 문자열이 아니고 null이 아닌 레코드를 사용하려면 아래를 사용할 수 있습니다.

WHERE DATALENGTH(COLUMN) > 0 

공백으로 구성된 모든 문자열을 공백으로 선택하려는 경우.

희망이 도움이 될 것입니다.

관련 문제