programing

오류 1265.txt 파일에서 데이터를 로드하려고 할 때 열에 대한 데이터가 잘림

megabox 2023. 9. 16. 08:54
반응형

오류 1265.txt 파일에서 데이터를 로드하려고 할 때 열에 대한 데이터가 잘림

mysql 테이블에 테이블이 있습니다.

 create table Pickup
    (
    PickupID int not null,
    ClientID int not null,
    PickupDate date not null,
    PickupProxy  varchar (40) ,
    PickupHispanic bit default 0,
    EthnCode varchar(2),
    CategCode varchar (2) not null,
    AgencyID int(3) not null,
    
    Primary Key (PickupID),
    FOREIGN KEY (CategCode) REFERENCES Category(CategCode),
    FOREIGN KEY (AgencyID) REFERENCES Agency(AgencyID),
    FOREIGN KEY (ClientID) REFERENCES Clients (ClientID),
    FOREIGN KEY (EthnCode) REFERENCES Ethnicity (EthnCode)
    );

내 txt 파일의 샘플 데이터

    1065535,7709,1/1/2006,,0,,SR,6
    1065536,7198,1/1/2006,,0,,SR,7
    1065537,11641,1/1/2006,,0,W,SR,24
    1065538,9805,1/1/2006,,0,N,SR,17
    1065539,7709,2/1/2006,,0,,SR,6
    1065540,7198,2/1/2006,,0,,SR,7
    1065541,11641,2/1/2006,,0,W,SR,24

를 이용하여 제출하려고 할 때

LOAD DATA INFILE 'Pickup_withoutproxy2.txt' INTO TABLE pickup;

오류를 던집니다.

오류 코드: 1265.'픽업' 열에 대한 데이터가 잘립니다.1열의 신분증

MySQL 5.2를 사용하고 있습니다.

이 오류는 Pickup_without 프록시2에서 하나 이상의 행을 의미합니다.txt 파일의 첫 번째 열의 값이 int보다 큽니다(PickupId 필드).

Int는 -2147483648 ~2147483647 사이의 값만 허용할 수 있습니다.

데이터를 검토하여 무슨 일이 일어나고 있는지 확인합니다.txt 파일이 너무 커서 보기 어렵다면 varchar 데이터 형식의 임시 테이블에 로드해 볼 수 있습니다.데이터베이스에 한 번 로드된 int를 확인할 수 있을 정도로 쉽습니다.

행운을 빌어요.

당신은 를 .FIELDS TERMINATED BY ','기본적으로 탭으로 구분한다고 가정합니다.

저도 같은 문제가 있었습니다.테이블 구조에서 ENUM 값을 편집하고 싶었습니다.이전에 저장된 행과 새 ENUM 값이 저장된 값을 포함하지 않기 때문에 문제가 발생했습니다.

솔루션이 MySql 테이블에 저장된 이전 행을 업데이트하고 있습니다.

그 이유는 mysql이 텍스트 파일의 행 기호가 마지막으로 지정된 열 뒤에 끝날 것을 예상하기 때문이며, 이 기호는 char(10) 또는 '\n'입니다.텍스트 파일을 만든 운영 체제에 따라 달라지거나 텍스트 파일을 직접 만든 경우 다른 조합이 될 수 있습니다(Windows에서는 행 구분자로 '\r\n'(chr(13)+chr(10)).따라서 Windows에서 생성한 텍스트 파일을 사용하는 경우 LOAD 명령에 "LINES TERMINED BY '\r\n'" 접미사를 추가합니다.그렇지 않으면 텍스트 파일에서 행이 어떻게 구분되어 있는지 확인합니다.기본적으로 mysql에서 char(10)를 행 구분 기호로 기대합니다.

기존 버전을 변환할 때 이 문제가 발생했습니다.varchar에 열을 올립니다.enum그이 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .enum의 허용된 값 목록입니다.그래서 만약 당신의enum값만 허용할 것입니다, 라고 말합니다.('dog', 'cat')하지만 사이에 불화가 있습니다.bird에서,에서,는MODIFY COLUMN이 오류와 함께 실패합니다.

ENUM 값('0', '1')이 있는 열로 이 문제를 해결했습니다.
새 레코드를 저장하려고 때 ENUM 변수대해 값 0을 할당하고 있었습니다.

솔루션경우:ENUM 변수 값을 0에서 1로, 1에서 2변경했습니다.

저도 같은 문제가 있었습니다. 제 실수는 이전에 정의하지 않은 값을 서버에 로드하려고 했던 것입니다.ENUM().

예를들면,ENUM('sell','lend')그리고 그 가치를 실으려고 노력하고 있었습니다.return그 칼럼에.로딩이 필요해서 추가했습니다.ENUM다시 로드합니다.

데이터에 여유 공간, 탭, 새 줄 또는 다른 문자가 열에 있을 때 동일한 경고가 표시됩니다.decimal(10,2)이를 해결하기 위해 가치에서 캐릭터를 제거해야 했습니다.

제가 처리한 방법은 이렇습니다.

LOAD DATA LOCAL INFILE 'c:/Users/Hitesh/Downloads/InventoryMasterReportHitesh.csv' 
INTO TABLE stores_inventory_tmp 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(@col1, @col2, @col3, @col4, @col5)
SET sku = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col1,'\t',''), '$',''), '\r', ''), '\n', ''))
, product_name = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col2,'\t',''), '$',''), '\r', ''), '\n', ''))
, department_number = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col3,'\t',''), '$',''), '\r', ''), '\n', ''))
, department_name = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col4,'\t',''), '$',''), '\r', ''), '\n', ''))
, price = TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@col5,'\t',''), '$',''), '\r', ''), '\n', ''))
;

대답에서 힌트를 얻었습니다.

csv 파일을 mysql xampp로 가져오는 동안 나는 같은 문제에 직면했습니다.'\n'으로 끝나는 선과 '\r\n'으로 끝나는 선 대신 '\r'로 끝나는 선을 사용했습니다.

이 오류는 라인이 없는 결과일 수도 있지만,

FIELDS SPECIFIED BY ','

(콤마를 사용하여 필드를 구분하는 경우) MySQL 문서의 이 페이지에 설명된 대로 MySQL 구문에서 사용합니다.

언급URL : https://stackoverflow.com/questions/14764080/error-1265-data-truncated-for-column-when-trying-to-load-data-from-txt-file

반응형