programing

데이터베이스에 "(빈 문자열)을 NULL이 아닌 값으로 저장할 수 있습니까?

bestprogram 2023. 7. 21. 21:45

데이터베이스에 "(빈 문자열)을 NULL이 아닌 값으로 저장할 수 있습니까?

저는 오라클 DB를 사용하고 있습니다.데이터베이스 수준에서 열 값을 NULL 또는 "(빈 문자열)로 설정하면 두 경우 모두에서 가져온 값이 NULL입니다.데이터베이스에 "(빈 문자열)을 NULL이 아닌 값으로 저장할 수 있습니까?

실행합니다.

UPDATE contacts SET last_name = '' WHERE id = '1001';

commit;

SELECT last_name, ID FROM contacts WHERE id ='1001';

LAST_NAME                  ID
------------               ------
null                       1001

last_name을 NULL이 아닌 빈 문자열(')로 저장할 수 있습니까?

오라클에서 이 작업을 수행하는 유일한 방법은 어떤 종류의 보조 플래그 필드를 사용하는 것입니다. 이 필드는 설정 시 값이 빈 문자열이어야 한다는 사실을 나타냅니다.

Oracle이 "와 NULL을 구분하지 않는 것으로 알고 있습니다. 여기를 참조하십시오.

Oracle은 자동으로 변환하는 잘 알려진 동작을 가지고 있습니다.""로.NULLINSERT 및 UPDATE 문에 표시됩니다.

변환을 통해 이 동작을 방지하려면 코드에서 이 동작을 처리해야 합니다.NULL로.""열을 다시 읽고 사용하지 않을 때null처음부터 당신의 프로그램에서.

오라클을 사용한 지 오래되었지만, 빈 문자열을 나타낼 때는 ' '라는 한 칸을 사용하다가 읽은 후 트리밍을 했던 것 같습니다.

를 사용하는 경우VARCHAR2그때 데이터 유형NULL그리고.''동일하므로 이들을 구별할 수 없습니다. 따라서 다른 답변에서 언급한 것처럼 다음 중 하나를 수행해야 합니다.

  • 비-항목을 구분하는 플래그가 포함된 추가 열이 있어야 합니다.NULL그리고.NULL값을 표시하여 플래그가 비-NULL그리고 그것은 포함합니다.NULL그러면 빈 문자열이라는 것을 알 수 있습니다; 또는
  • 빈 문자열에는 단일 공백 문자와 같은 대체 표현을 사용합니다.이렇게 하면 해당 대체 표현을 사용하여 문자열을 저장할 수 없지만, 저장 중인 문자열에 대해 뒤에 오는 공백이 구문적으로 올바르지 않은 경우 빈 문자열을 나타내는 단일 공백 문자를 사용하면 됩니다.

를 사용하는 경우CLOB데이터 유형을 사용하여 빈 문자열을 저장할 수 있습니다.EMPTY_CLOB()함수:

CREATE TABLE table_name (value CLOB);

INSERT INTO table_name (value) VALUES (NULL);
INSERT INTO table_name (value) VALUES (EMPTY_CLOB());
INSERT INTO table_name (value) VALUES ('A');

그러면:

SELECT value, LENGTH(value) FROM table_name;

출력:

가치 길이(값)
무효의 무효의
0
A 1

db<>여기로 이동

언급URL : https://stackoverflow.com/questions/2185743/is-it-possible-to-store-empty-string-as-a-non-null-value-in-the-database