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
'스터디 > Database' 카테고리의 다른 글
[MySQL] PK 컬럼 순서와 Index (0) | 2024.07.13 |
---|---|
[MySQL] 대용량 테이블 스키마 변경하기 (0) | 2024.04.14 |
[DB] MySQL CharacterSet과 Collation (0) | 2022.11.12 |
[MySQL] 다중 테이블 업데이트, 여러 테이블 update 하기 (0) | 2022.10.06 |
[DB] ACID란? (0) | 2021.07.04 |
댓글