DEV WIKI
백엔드 · 오류·증상

Data too long for column '%s' at row %ld

MySQL 오류 1406(ER_DATA_TOO_LONG)을 오류 메시지 형식과 SQLSTATE로 식별합니다.

빠른 답변

우선 확인할 원인
이 메시지는 MySQL 오류 1406(ER_DATA_TOO_LONG), SQLSTATE 22001에 해당하며, 메시지의 첫 번째 값은 열 이름이고 두 번째 값은 행 번호입니다.
먼저 확인할 항목
오류 번호가 1406인지 확인합니다.
적용 범위
현재 증상과 본문에 적은 관찰 조건이 함께 확인된 경우
출처 확인일
2026-07-29
최종 검토
2026-07-24
수정일
2026-07-27
오류·수정 제보 (새 창에서 열림)

현재 증상

  • 애플리케이션 오류 메시지

먼저 확인할 항목

오류 번호가 1406인지 확인합니다.

오류 심볼이 표시되면 ER_DATA_TOO_LONG인지 확인합니다.

SQLSTATE가 표시되면 22001인지 확인합니다.

오류 메시지가 Data too long for column '<열 이름>' at row <행 번호> 형식과 일치하는지 확인합니다.

피해야 할 조치

주의

  • 오류 원문만으로 저장된 데이터나 열 정의를 변경하지 않습니다.

환경별 원인과 조치

확인

현재 화면 또는 로그에서 오류 번호가 1406인지 확인합니다.

오류 심볼이 표시되면 ER_DATA_TOO_LONG인지 확인합니다.

SQLSTATE가 표시되면 22001인지 확인합니다.

오류 메시지가 Data too long for column '<열 이름>' at row <행 번호> 형식과 일치하는지 확인합니다. 메시지의 첫 번째 값은 열 이름이고 두 번째 값은 행 번호입니다.

판정

오류 번호가 1406이고, SQLSTATE가 22001이며, 메시지 형식이 일치하면 이 문서의 MySQL 오류 1406으로 식별합니다.

출처

MySQL 8.0 Server Error Message Reference (새 창에서 열림)

관찰값 기록

문제가 발생한 URL 또는 화면, 표시 시각, 운영 환경과 최근 변경 사항을 먼저 기록합니다. 화면이나 로그에 오류 문구가 일부만 보이면 앞뒤 문장을 보존하고 비밀번호·토큰·쿠키·개인정보는 가립니다.

다음 항목을 실제 값과 함께 확인합니다.

  1. 오류 번호가 1406인지 확인합니다.
  2. 오류 심볼이 표시되면 ER_DATA_TOO_LONG인지 확인합니다.
  3. SQLSTATE가 표시되면 22001인지 확인합니다.
  4. 오류 메시지가 Data too long for column '<열 이름>' at row <행 번호> 형식과 일치하는지 확인합니다.

판정 기준

오류 문구가 일치해도 같은 원인이 확정되는 것은 아닙니다. 웹서버·런타임·운영체제·플랫폼과 최근 변경 사항을 비교하고, 기대한 관찰값이 나오지 않으면 다음 단계로 넘어가지 않습니다. 이 문서는 출처가 확인한 범위만 설명하며, 범위를 벗어난 원인과 조치는 단정하지 않습니다.

안전한 다음 확인

설정·권한·데이터를 변경하기 전에 백업과 되돌리기 방법을 기록합니다. 운영 환경의 방화벽 전체 해제, 인증서 검증 우회, 데이터 삭제, 비밀값 공개를 기본 조치로 사용하지 않습니다. 확인 결과가 문서의 조건과 다르면 관련 Platform·Component 문서와 공식 출처를 먼저 확인합니다.

원인 분포

[Observation] 입력된 3건에서는 다음 원인이 관측되었습니다.

  • 선언된 열 길이보다 실제 값이 긴 경우: 2건
  • 예상한 스키마와 실제 적용된 스키마의 길이가 다른 경우: 1건

[Observation] 이 분포는 수집된 사례 기준이며, 전체 발생 빈도를 의미하지 않습니다.

오진 함정

  • [Observation] 애플리케이션에서 확인한 열 정의가 실제 데이터베이스에 적용된 정의와 다를 수 있습니다. 사례 1에서는 예상보다 짧은 VARCHAR 정의가 남아 있었습니다.
  • [Observation] 문자열의 체감 길이만으로 저장 가능 여부를 판단하면 안 됩니다. 사례 2에서는 선언 길이 15인 열에 16자 값이 입력되었습니다.
  • [Hypothesis] 로그 기록 경로에서는 애플리케이션이 생성한 특정 필드의 실제 길이를 별도로 확인하지 않으면 테이블 정의와의 불일치를 놓칠 수 있습니다.

환경 매트릭스

환경관측된 조건수정 방향
일반 애플리케이션 입력값이 VARCHAR 선언 길이를 초과함입력 길이 제한 또는 열 타입 변경
스키마 재생성·갱신 환경실제 테이블에 이전의 더 짧은 VARCHAR 정의가 남아 있음테이블 스키마를 다시 생성
.NET log4net·MySQL 로그 기록action 값의 실제 길이가 고정 길이 열보다 김열 크기 또는 기록 데이터 길이 조정

진단 순서

  1. [Observation] 오류가 발생한 열의 실제 테이블 정의와 선언된 길이를 확인합니다.
  2. [Observation] 오류 시점에 입력된 실제 값의 길이를 확인하고 열 선언 길이와 비교합니다.
  3. [Observation] 애플리케이션이 사용하는 스키마가 데이터베이스에 실제로 적용된 스키마와 같은지 확인합니다.
  4. [Observation] 원인에 따라 입력 데이터 길이를 제한하거나 열 크기·타입을 조정합니다.
  5. [Observation] 스키마 정의가 오래된 경우 테이블 스키마를 다시 생성합니다.

참고 자료

MySQL :: MySQL 8.0 Error Reference :: 2 Server Error Message Reference (새 창에서 열림)

MySQL · 공식 자료 · 확인 범위: MySQL 오류 번호 1406의 심볼은 ER_DATA_TOO_LONG입니다., MySQL 오류 번호 1406의 SQLSTATE는 22001입니다., MySQL 오류 번호 1406의 메시지 형식은 Data too long for column '%s' at row %ld입니다. · 확인일: 2026-07-24

Stack Overflow · 운영 사례 (새 창에서 열림)

확인 범위: 실제 적용된 테이블 정의에 예상보다 짧은 VARCHAR 길이가 남아 있어 오류가 발생했습니다., 테이블 스키마를 다시 생성한 뒤 문제가 해결되었습니다. · 확인일: 2026-07-29

Stack Overflow · 운영 사례 (새 창에서 열림)

확인 범위: VARCHAR(15) 열에 16자 값을 저장하려다 오류가 발생했습니다., 입력 길이를 제한하거나 필요한 저장 크기에 맞게 열 타입을 변경하는 대응이 제시되었습니다. · 확인일: 2026-07-29

Stack Overflow · 운영 사례 (새 창에서 열림)

확인 범위: log4net이 기록한 action 값의 길이가 MySQL 테이블 열의 고정 길이를 초과했습니다., 테이블 열 크기 또는 기록 데이터 길이를 조정해야 하는 환경이었습니다. · 확인일: 2026-07-29