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

MySQL 'Data too long for column' 오류란? 원인과 해결 방법 총정리

MySQL "Data too long for column" 오류란?

MySQL에서 "Data too long for column" 오류는 컬럼에 저장할 수 있는 최대 크기보다 더 많은 데이터를 삽입하려고 할 때 발생합니다.

예를 들어, 데이터 타입이 varchar(6)이라면 해당 컬럼에는 최대 6자까지만 저장할 수 있습니다. 따라서 6자를 초과하는 값을 입력하면 이 오류가 발생하게 됩니다.

오류 재현을 위한 테이블 생성

오류를 이해하기 위해 실제로 테이블을 하나 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table DataToolongDemo
    -> (
    -> Name varchar(10)
    -> );
Query OK, 0 rows affected (0.55 sec)

테이블이 성공적으로 생성되었습니다. 여기서 "Name" 필드를 varchar(10)으로 설정했기 때문에, 10자를 초과하는 값을 입력하면 오류가 발생합니다.

오류 발생 확인

공백을 포함해 12자에 해당하는 'Carol Taylor'라는 이름을 삽입해 보겠습니다.

mysql> insert into DataToolongDemo values('Carol Taylor');
ERROR 1406 (22001): Data too long for column 'Name' at row 1

위와 같이 ERROR 1406 (22001) 오류가 발생합니다. 입력하려는 값이 varchar(10)의 허용 길이를 초과했기 때문입니다.

오류 해결 방법: longtext로 타입 변경

이 오류를 해결하는 가장 간단한 방법은 컬럼 타입을 longtext로 변경하는 것입니다. 현재 타입이 varchar이므로, 다음과 같이 ALTER TABLE 문을 사용해 변경할 수 있습니다.

mysql> alter table DataToolongDemo change Name Name longtext;
Query OK, 0 rows affected (2.22 sec)
Records: 0 Duplicates: 0 Warnings: 0

컬럼 타입이 변경되었으므로, 이제 동일한 레코드를 다시 삽입하면 오류 없이 정상적으로 처리됩니다.

mysql> insert into DataToolongDemo values('Carol Taylor');
Query OK, 1 row affected (0.11 sec)

결과 확인

SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DataToolongDemo;

실행 결과는 다음과 같습니다.

+--------------+
| Name         |
+--------------+
| Carol Taylor |
+--------------+
1 row in set (0.00 sec)

추가로 알아두면 좋은 해결 방법

longtext로 변경하는 것 외에도 상황에 따라 다음과 같은 방법을 고려할 수 있습니다.

  • 데이터 길이 조정: 입력값 자체를 컬럼 길이에 맞게 자르거나 수정합니다.
  • 컬럼 크기 확장: ALTER TABLE ... MODIFY 문으로 varchar 길이를 늘립니다. 예: varchar(10)varchar(50)
  • STRICT 모드 비활성화: sql_mode에서 STRICT_TRANS_TABLES를 제거하면 오류 대신 경고만 발생하고 데이터가 잘려서 저장됩니다. 다만 데이터 손실 위험이 있으므로 권장하지 않습니다.

데이터 무결성을 유지하려면 적절한 컬럼 타입과 길이를 사전에 설계하는 것이 가장 중요합니다.