Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 VARCHAR 필드 크기를 확장해도 저장된 데이터에는 영향이 없을까?

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(컬럼명)) 등으로 최대 길이를 먼저 확인하는 것이 좋습니다.