MySQL VARCHAR 필드 크기 확장 시 기존 데이터는 안전한가?
MySQL에서 VARCHAR 필드의 크기를 확장하더라도 그 안에 이미 저장되어 있는 데이터는 전혀 영향을 받지 않습니다. 반면 크기를 축소할 경우에는 기존 데이터가 잘리거나 오류가 발생할 수 있으므로 주의가 필요합니다.
아래 예제를 통해 직접 확인해 보겠습니다.
1. 테스트용 테이블 생성
먼저 VARCHAR(8) 타입의 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable(
Name varchar(8)
);
Query OK, 0 rows affected (1.11 sec)
2. 샘플 데이터 삽입
INSERT 명령으로 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.13 sec)3. 현재 테이블 구조 확인
SELECT 문으로 저장된 데이터를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------+
| Name |
+--------+
| John |
| Robert |
| Mike |
| Sam |
+--------+
4 rows in set (0.00 sec)
DESC 명령으로 테이블 구조도 살펴봅니다.
mysql> desc DemoTable;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| Name | varchar(8) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.04 sec)
4. VARCHAR(8) → VARCHAR(100)으로 확장
이제 ALTER TABLE 문을 사용하여 컬럼 크기를 8에서 100으로 확장합니다.
mysql> alter table DemoTable change Name Name varchar(100);
Query OK, 4 rows affected (1.96 sec)
Records: 4 Duplicates: 0 Warnings: 0
변경 후 다시 테이블 구조를 확인해 보겠습니다.
mysql> desc DemoTable;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| Name | varchar(100) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.01 sec)
5. 결론 및 주의사항
VARCHAR 크기를 확장하면 컬럼 정의만 변경될 뿐 기존 데이터는 그대로 유지되므로 안전합니다. 하지만 크기를 축소(예: VARCHAR(100) → VARCHAR(10))할 때는 해당 크기를 초과하는 데이터가 존재하면 데이터 잘림(truncation) 오류가 발생할 수 있으니, 축소 전에 반드시 MAX(LENGTH(컬럼명)) 등으로 최대 길이를 먼저 확인하는 것이 좋습니다.