MySQL의 열 오류로 인해 수정 데이터가 잘림
이 문서는 MySQL에서 Data is truncated for a column
오류에 대한 가능한 이유와 해결 방법을 보여줍니다.
MySQL에서 Data is Truncated for a Column
오류 수정
여기에서는 MySQL data is truncated for a column
오류를 제거하기 위한 가능한 이유와 솔루션을 살펴봅니다.
데이터가 너무 큽니다.
MySQL 테이블에 수동으로 삽입하는 대신 파일에서 데이터를 로드해야 하는 몇 가지 시나리오가 있습니다. 로드하는 동안 Data truncated for a column 'columnName' at row #
오류가 발생할 수 있습니다. 왜?
주어진 데이터가 MySQL 테이블에 있는 열의 데이터 유형에 비해 너무 큰 것 같기 때문입니다. 예를 들어, 제공된 데이터의 65K 문자만 수용할 수 있는 value
속성이 text
유형인 테이블이 있습니다.
65K를 초과하는 value
열에 데이터를 삽입하면 이 오류가 발생합니다.
이 문제를 해결하기 위해서는 MEDIUMTEXT
또는 LONGTEXT
와 같이 16MB 및 4GB를 수용할 수 있는 더 많은 데이터를 수용할 수 있는 유형을 변경해야 합니다. 여기에서 몇 가지 최적화 팁을 찾을 수도 있습니다.
SET ANSI_WARNINGS OFF
를 사용하여 데이터를 자르고 열 데이터 유형의 최대 길이를 고려하여 레코드를 다시 삽입할 수도 있습니다.
잘못된 데이터가 전달됨
Error Code: 1265. Data truncated for column 'a' at row 1
은 잘못된 데이터를 삽입하려고 하면 MySQL에서도 발생합니다.
예를 들어 price
필드가 float
유형이고 NULL
값을 허용하는 테이블이 있습니다. 다음을 참조하십시오.
#create a table named `prices`
CREATE TABLE prices (ID INT NOT NULL, price FLOAT NULL);
#insert the first record
INSERT prices VALUES (1, '');
여기에서는 NULL
값을 갖는 float
유형인 price
열에 빈 문자열을 삽입합니다. NULL
과 ''
는 같은 것이 아닙니다.
그래도 NULL
값을 갖는 열에 빈 문자열을 삽입하려고 하면 오류 코드: 1265. 행 1의 'a' 열에 대해 잘린 데이터
가 생성됩니다. 이 문제에 대한 가장 간단한 해결책은 price
테이블의 각 열에서 요구하는 올바른 데이터 유형의 올바른 값을 전달하는 것입니다.
빈 문자열(''
) 대신 명시적으로 NULL
값을 지정하거나 INSERT
문에 특정 열에 대한 값을 쓰지 않아도 문제를 해결할 수 있습니다. 예제를 고려하여 다음 스니펫을 참조하십시오.
INSERT prices VALUES (1, NULL); #insert null explicitly
INSERT prices (ID) VALUES (2); #don't specify values for `price` column
잘못된 종료 문자
MySQL 테이블에 모든 줄을 수동으로 삽입하면 모든 것이 잘 됩니다. 오류는 한 번에 둘 이상의 줄을 로드하려고 시도하고 종료 문자를 제대로 가져오지 않을 때 발생합니다.
이를 해결하기 위해서는 파일의 종료 문자를 확인하고 다음과 같이 LOAD
명령에 지정해야 합니다.
#if the terminating character is `tab`
FIELDS TERMINATED BY '\t'
#if the terminating character is a `comma`
FIELDS TERMINATED BY ','