1364: Field 'name' doesn't have a default value (필드에 기본값 없음)
MySQL의미
DEFAULT 없이 NOT NULL로 정의된 컬럼에 값을 지정하지 않고 행을 삽입했다. strict SQL 모드에서 MySQL은 누락된 필수 컬럼을 자동으로 채울 수 없어 오류를 발생시킨다.
원인
필수(NOT NULL, DEFAULT 없음) 컬럼이 INSERT에서 누락되었고 sql_mode에 STRICT_TRANS_TABLES/STRICT_ALL_TABLES가 활성화되어 있다. 이전의 관대한 모드용으로 작성된 애플리케이션을 strict 모드가 활성화된 서버로 옮기면 이 오류가 발생한다.
해결 방법
INSERT에 누락된 컬럼의 값을 추가하거나 컬럼에 적절한 DEFAULT를 정의한다: ALTER TABLE my_table MODIFY my_column ... NOT NULL DEFAULT 'value'; 컬럼이 실제로 선택 사항이라면 NULL을 허용한다. 임시/호환성 우회책으로 sql_mode를 완화할 수 있지만 데이터 품질을 위해 strict 모드 유지를 권장한다.
같은 데이터베이스의 다른 항목
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value (해당 값에 대한 파티션 없음)
- 1049Unknown database 'name'
- 1206The total number of locks exceeds the lock table size (전체 락 수가 락 테이블 크기 초과)
- 1236Got fatal error 1236 from master when reading data from binary log (binary log 읽기 중 master로부터 치명적 오류 1236 수신)
- 1129Host 'host' is blocked because of many connection errors (연결 오류가 많아 호스트 차단됨)
- 1194Table 'name' is marked as crashed and should be repaired (테이블이 crashed로 표시되어 복구 필요)