mysql 1406 / Data too long for column '' at row ?

2020. 5. 4. 15:11Trouble Shooting

Mysql / Maria DB 사용중 종종

 

Data too longData too long for column '<Column>' at row <[0-9]+>

 

위 와 같은 에러 문구를 볼 수 있는데,

 

이러한 상황에서는 DB에서 Global로 설정되어 있는 'STRICT_TRANS_TABLES' 가 명시되어 있으면

Data Insert를 엄격하게 관리하기 때문에 Column의 길이를 늘려도 계속해서 발생할 수 있는데,

 

이를 해제하면 길이를 초과할 경우 알아서 잘라서 버려버리고 에러를 출력하지 않게됩니다.

 

이는 무결성 검증에 굉장히 안좋은 현상을 초래할 수 있고, APP 검증보다는 당연히 DB상에서 검증하는게 훨씬 효율적이기에 이러한 설정이 되있다고 하는데, mysql 5.5에서는 이게 기본적으로 해제가 되있다고 하는군요...

 

 

select @@global.sql_mode;  # SQL 설정 보기

# SQL 설정
set @@global.sql_mode="STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

 

 

INSERT에서 결과적으로

Data too longData too long for column '<Column>' at row <[0-9]+> 

이런 에러가 나온다면 현재 설정한 Column 길의 값을 초과하는 데이터가 입력되었으니 당연히 늘려주어야 합니다.

 

 

Text의 경우 다음과 같은 크기를 가집니다.

TINYTEXT   | 256 Bytes          |           255 characters
TEXT       |  64 Kilobytes      |        65,535 characters
MEDIUMTEXT |  16 Megabytes      |    16,777,215 characters
LONGTEXT   |   4 Gigabytes      | 4,294,967,295 characters

 

 

 

 

하지만 이러한 상황 이외에도 패킷의 수신 최대크기의 한계로 문제가 되는 경우도 있습니다.

select @@max_allowed_packet;  # 패킷 최대크기 확인
SET GLOBAL max_allowed_packet = 1024 * 1024 * 32;  # 패킷 최대크기 33,554,432 설정 

TAG