본문 바로가기
스터디/Database

[MySQL] TEXT Column cannot set default value

by zoodi 2023. 8. 12.
728x90

text 타입을 가지는 컬럼의 default 값을 설정하려고 할 때 "TEXT Column cannot set default value" 이라는 에러가 발생하여 그 원인을 찾아보았습니다!

 

 

TEXT 컬럼 default value 설정

CREATE TABLE `test_table` (
  `col1` INT(11) NOT NULL AUTO_INCREMENT,
  `col2` TEXT,
  `col3` INT(11) DEFAULT NULL,
  `col4` TINYINT(1) DEFAULT '0',
  PRIMARY KEY (`col1`)
);

먼저 위와 같은 쿼리로 test_table을 생성합니다.

 

ALTER TABLE `table1` change `col2` `col2` text  default '';

col2 컬럼의 디폴트 값을 empty string 인 ''로 바꾸어 봅니다.

위 쿼리를 수행하면 아래와 같은 에러메시지가 발생하는 것을 확인할 수 있는데요!

BLOB, TEXT, GEOMETRY or JSON column 'col2' can't have a default value.

 

그 이유는 다음과 같습니다.

 

  • MySQL 데이터베이스에서 BLOB, TEXT, GEOMETRY 또는 JSON 형식의 열이 기본값을 가질 수 없다는 것을 나타냅니다.
  • MySQL에서 BLOB, TEXT, GEOMETRY 또는 JSON 형식의 열은 매우 큰 데이터를 저장할 수 있는 유형으로 간주됩니다. 이러한 유형의 열은 일반적으로 기본값을 가질 수 없습니다.
  • 기본값을 저장하려면 열의 크기를 사전에 지정해야 하기 때문입니다.
  • 그러나 BLOB, TEXT, GEOMETRY 또는 JSON 열은 가변 길이 데이터를 저장할 수 있으며, 크기가 고정되어 있지 않습니다.
  • 따라서 MySQL에서는 이러한 유형의 열에 대한 기본값을 설정할 수 없도록 제한하고 있습니다.

즉, ALTER TABLE 문에서 col2 열의 데이터 형식을 TEXT로 변경하면서 동시에 기본값을 빈 문자열('')로 설정하려고 했기 때문에 위와 같은 에러가 발생했습니다. col2 열에 기본값을 설정하려면 BLOB, TEXT, GEOMETRY 또는 JSON 형식을 사용하지 않아야 합니다.

 

만약 default 값으로 ''를 설정하고 싶다면 컬럼의 타입을 varchar 로 설정해주어야합니다.

 

 

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/blob.html#idm140312903326336

https://stackoverflow.com/questions/3466872/why-cant-a-text-column-have-a-default-value-in-mysql

https://stackoverflow.com/questions/16141727/change-text-column-default-from-null-to-empty-string

728x90

댓글