source

열에 대한 데이터가 잘렸습니까?

lovecheck 2022. 12. 28. 21:45
반응형

열에 대한 데이터가 잘렸습니까?

Twilio 콜 ID(34 문자 문자열)를 저장하기 위해 MySql 열의 데이터 유형을 변경한 후 다음과 같이 해당 열의 데이터를 수동으로 변경하려고 합니다.

update calls 
   set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d' 
 where id='1';

그러나 컬럼의 데이터 유형이 올바르게 수정된 것을 보면 납득할 수 없는 오류가 나타납니다.

| Level ||| Code | Message | Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1

당신의 문제는 그 순간 당신의 몸이incoming_Cid로 정의되는 컬럼CHAR(1)언제가 되어야 할 때CHAR(34).

이 문제를 해결하려면 이 명령을 발행하여 열의 길이를 1에서 34로 변경하십시오.

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);

SQLFiddle 데모입니다.

ENUM('x' 'y' 'z')으로 정의된 테이블 컬럼으로 인해 동일한 문제가 발생하였고, 나중에 이 컬럼에 값 'a'를 저장하려다 오류가 발생하였습니다.

테이블 열 정의 및 추가 값 'a'를 열거 집합으로 변경하여 해결합니다.

다음 스테이트먼트를 발행합니다.

ALTER TABLES call MODIFY incoming_Cid CHAR;

... length 파라미터를 생략했습니다.따라서 쿼리는 다음과 같습니다.

ALTER TABLE calls MODIFY incoming_Cid CHAR(1);

1보다 큰 크기의 필드 크기를 지정해야 합니다.

ALTER TABLE calls MODIFY incoming_Cid CHAR(34);

그러나 컬럼의 데이터 유형이 올바르게 수정된 것을 보면 납득할 수 없는 오류가 나타납니다.

| Level | Code | Msg | Warn | 12 | Data truncated for column 'incoming_Cid' at row 1

다음과 같은 작업을 수행할 때 이 메시지가 자주 표시됩니다.

REPLACE INTO table2 (SELECT * FROM table1);

그 결과, 다음의 에러가 발생했습니다.

SQL Exception: Data truncated for column 'level' at row 1

이 문제는 컬럼의 정렬 불량으로 판명되었습니다.tinyint저장하려고 합니다.datetime필드 또는 그 반대입니다.

이 경우 요일을 정수(0~6)로 받아들이는 ENUM이 있는 테이블입니다.값 0을 정수로 삽입하면 "Data truncated for column..."이라는 오류 메시지가 표시되므로 수정하기 위해 정수를 문자열에 캐스트해야 했습니다.그래서 다음 대신:

$item->day = 0;

해야만 했다.

$item->day = (string) 0;

이렇게 0을 입력하는 것은 바보같이 보이지만, 제 경우엔 라라벨 공장에 있었고, 저는 이렇게 적어야 했습니다.

$factory->define(App\Schedule::class, function (Faker $faker) {
    return [
        'day' => (string) $faker->numberBetween(0, 6),
        //
    ];
});

같은 문제가 있었습니다만, 「SET」타입의 데이터베이스 필드에 열거형이 있습니다.

나는 그 목록에 없는 값을 추가하려고 했다.

추가하려고 했던 값은 10진수 값 256이었지만 열거형 목록의 값은 8개뿐이었습니다.

1: 1   -> A
2: 2   -> B
3: 4   -> C
4: 8   -> D
5: 16  -> E
6: 32  -> F
7: 64  -> G
8: 128 -> H

그래서 필드에 추가 값을 추가해야 했습니다.

여기에 이미지 설명 입력

문서의 엔트리를 읽고 문제를 이해하는 데 도움이 되었습니다.

MySQL은 SET 값을 수치로 저장하며, 저장된 값의 하위 비트는 첫 번째 set 멤버에 대응합니다.숫자 컨텍스트에서 SET 값을 가져오면 검색된 값에는 열 값을 구성하는 설정 멤버에 대응하는 비트가 설정됩니다.예를 들어 다음과 같이 SET 열에서 숫자 값을 검색할 수 있습니다.

mysql> SELECT set_col+0 FROM tbl_name; If a number is stored into a

숫자를 SET 열에 저장할 경우 숫자의 이진 표현으로 설정된 비트에 따라 열 값의 설정 멤버가 결정됩니다.SET('a','b' 'c' 'd')로 지정된 컬럼의 멤버는 다음과 같은 10진수 및 2진수 값을 가집니다.

SET Member  Decimal Value   Binary Value
    'a'                1          0001
    'b'                2          0010
    'c'                4          0100
    'd'                8          1000

이 열에 값 9를 할당하면 2진수로는 1001이므로 제1 및 제4 SET 값 부재 a, d가 선택되고 결과 값은 a, d가 된다.

처음에 csv를 mysql로 Import하려고 했을 때 같은 에러가 발생했습니다.그리고 작성한 mysql 테이블에는 Import csv 필드의 문자 길이가 없기 때문에 csv를 처음 Import하는 경우

  1. 더 많은 글자 길이를 주는 것은 좋은 생각입니다.
  2. 에 라벨을 varchar ★★★★★★★★★★★★★★★★★」textint★★★★★★★★★★★★★★★★★★

그럼 가도 좋아

나의 문제는 Boolean 열에 단어를 추가하는 큰따옴표 대신 작은따옴표를 사용했다는 것이다.

나는 같은 문제에 직면했다.제 경우 숫자 열에 빈 문자열을 삽입하고 있었습니다.단, 같은 컬럼에 숫자 값을 문자열 형식으로 삽입하면 해결되었습니다.예를 들어 "12.56" --> 숫자 컬럼은 동작하지만 " --> 숫자 컬럼은 위의 오류를 나타냅니다.주의: MySql의 숫자 열의 경우 값을 큰따옴표로 묶어서 전달할 수도 있습니다.

'enum' 데이터 유형을 사용하고 있는지 확인합니다.'enum' 데이터 유형을 사용하는 경우 열거 데이터 유형 내의 항목이 입력하는 데이터와 정확히 일치해야 합니다.예. 열거형 데이터형을 enum('book', stationery', others')으로 합니다.데이터베이스에 데이터를 삽입할 때는 INSERT IN database_name.table_name(column1,...column) VALUES()와 같이 해야 합니다.이 값은 열거형 괄호 안에 나와 있는 항목을 포함해야 합니다.

언급URL : https://stackoverflow.com/questions/18089240/data-truncated-for-column

반응형