문서유형ㅣ장애해결
분야ㅣ마이그레이션
적용제품버전ㅣ6FS07
오류코ㅣ10005
문서번호ㅣTMITS008
현상
MySQL의 '' (empty string, 빈 문자열) 데이터를 Tibero로 이관 시 JDBC-10005: NOT NULL constraint violation 에러가 발생하였습니다.
원인
MySQL에서는 '' (빈 문자열)을 NULL이 아닌 유효한 문자열로 처리하지만, Tibero에서는 '' (빈 문자열)을 NULL로 처리합니다.
따라서 NOT NULL 제약 조건이 있는 컬럼의 '' (빈 문자열) 을 Tibero로 이관할 경우, Tibero에서는 NOT NULL 제약 조건 위반 에러가 발생할 수 있습니다.
해결
'' (빈 문자열, Empty String) 처리 방식에 대한 협의가 아래와 같이 필요합니다.
- NULL 처리 : INSERT_ZERO_LENGTH_STRING_AS_NULL=Y 사용, NOT NULL 제약 조건 삭제
- ' ' (공백) 처리 : INSERT_ZERO_LENGTH_STRING_AS_NULL=N 사용
예시 적용
NOT NULL 컬럼에 ''(빈 문자열) 데이터 입력을 아래와 같이 진행합니다.
- mysql
mysql> CREATE TABLE empty_table (C1 VARCHAR(10) DEFAULT '' NOT NULL);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into empty_table values (''), ('a');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from empty_table;
+----+
| C1 |
+----+
| |
| a |
+----+
2 rows in set (0.00 sec)- tibero
SQL> CREATE TABLE empty_table (C1 VARCHAR(10) DEFAULT '' NOT NULL);
Table 'EMPTY_TABLE' created.
SQL> insert into empty_table values (''), ('a');
TBR-10005: NOT NULL constraint violation ('WORLD'.'EMPTY_TABLE'.'C1').INSERT_ZERO_LENGTH_STRING_AS_NULL설정에 따른 이관 결과는 다음과 같습니다.SQL> CREATE TABLE empty_table (C1 VARCHAR(10));
Table 'EMPTY_TABLE' created.
INSERT_ZERO_LENGTH_STRING_AS_NULL=Y
SQL> select c1, length(c1) from empty_table;
C1 LENGTH(C1)
---------- -----------
a 1
2 rows selected.
INSERT_ZERO_LENGTH_STRING_AS_NULL=N
SQL> select c1, length(c1) from empty_table;
C1 LENGTH(C1)
---------- -----------
1
a 1
2 rows selected.참고
RDBMS 별 NULL 저장 방식INSERT VALUES TIBERO ORACLE MySQL MariaDB SQL Server PostgreSQL CUBRID -------------- ------- ------- ------ -------- ----------- ----------- ------- NULL NULL NULL NULL NULL NULL NULL NULL 'NULL' 문자열 문자열 문자열 문자열 문자열 문자열 문자열 ' ' (공백) 문자열 문자열 문자열 문자열 문자열 문자열 문자열 '' (빈 문자열) NULL NULL 문자열 문자열 문자열 문자열 문자열