Programming

[DB] mariadb/mysql NOT NULL ERROR 1364 :: 송코딩

송코딩 songcoding 2022. 11. 20. 19:53

데이터베이스의 제약 조건 중 NOT NULL 이란,

Null을 삽입할 수 없다는 뜻이지 공백이 안된다는 뜻이 아닙니다.

(ex. 공백 삽입 시도 --> VARCHAR는 공백 그대로 삽입, Date는 0000-00-00으로 대체 삽입, INT는 0으로 대체 삽입)

 

그러나 MariaDB 10.2.4 버전 부터는 NOT NULL 컬럼에 공백으로 삽입하려 하면

다음과 같은 에러가 발생 합니다.

  • ERROR 1364 : Field '컬럼명' doesn't have a default value.

 

그 이유는 sql_mode를 확인해보면 (MariaDB 10.2.4 버전 부터)

 

SELECT @@sql_mode;

기본 값으로 다음 모드가 설정되어 있기 때문입니다.

 

 

기본 네 가지 모드 중 다음 모드가 오류 ERROR 1364 를 발생 시킵니다.

  • STRICT_TRANS_TABLES
    : 빈 공간으로 데이터를 입력할 경우, 자동으로 NULL로 삽입됩니다.
      따라서 빈 공간으로 입력 시, NOT NULL이 지켜질 수 없습니다.

 

따라서 위 모드를 제외하고 모드를 재설정 해주면,

SET sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION';

 

INSERT 가 정상적으로 실행됩니다 :)

 

 

 

Reference. https://mariadb.com/kb/en/sql-mode/