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


90

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


2
수정 후 정확한 데이터 유형은 무엇입니까?
Joachim Isaksson

3
열에 해당 길이의 텍스트를위한 충분한 공간이 지정되어 있습니까?
John Conde

1
ALTER TABLES calls MODIFY incoming_Cid STRING;내가 한 일입니다.
Zagstrug

편집으로 인해 이전 주석 삭제 : 문자열이 char (1) 대신 char (34)이어야한다고 지정하지 않았지만 그렇게하는 방법을 모릅니다
Zagstrug

STRINGMySQL 유형이 아닙니다. 데이터베이스 엔진은 무엇입니까?
RandomSeed

답변:


83

귀하의 문제는 현재 귀하의 incoming_CidCHAR(1)CHAR(34).

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

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);

다음은 SQLFiddle 데모입니다.


13

ENUM ( 'x', 'y', 'z')로 정의 된 테이블 열 때문에 동일한 문제가 발생했으며 나중에이 열에 'a'값을 저장하려고했기 때문에 오류.

테이블 열 정의를 변경하고 열거 형 집합에 값 'a'를 추가하여 해결됩니다.


8

이 진술을 발행함으로써 :

ALTER TABLES call MODIFY incoming_Cid CHAR;

... 길이 매개 변수를 생략했습니다. 따라서 귀하의 쿼리는 다음과 동일합니다.

ALTER TABLE calls MODIFY incoming_Cid CHAR(1);

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

ALTER TABLE calls MODIFY incoming_Cid CHAR(34);

5

그러나 열의 데이터 유형이 제대로 수정 되었기 때문에 의미가없는 오류가 발생합니까?

| 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하거나 그 반대의 경우 로 판명되었습니다 .


1

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

$item->day = 0;

나는해야했다.

$item->day = (string) 0;

0을 이렇게 캐스팅하는 것은 어리석은 것처럼 보이지만 제 경우에는 Laravel 공장에 있었으므로 다음과 같이 작성해야했습니다.

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

1

처음으로 csv를 mysql로 ​​가져 오려고 할 때 동일한 오류가 발생하고 내가 만든 mysql 테이블에 가져 오는 csv 필드의 문자 길이가 없다는 것을 알았으므로 csv를 처음 가져 오는 경우

  1. 더 많은 문자 길이를 제공하는 것이 좋습니다.
  2. 모든 필드에 varchar또는 레이블을 지정하고 text혼합 int또는 다른 값을 사용 하지 마십시오 .

그럼 당신은 갈 수 있습니다.


0

열거 형 유형 인 "SET"유형의 데이터베이스 필드에서 동일한 문제가 발생했습니다.

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

추가하려고 한 값은 십진수 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 열에서 숫자 값을 검색 할 수 있습니다.

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이므로 첫 번째 및 네 번째 SET 값 멤버 'a'및 'd'가 선택되고 결과 값은 'a, d'가됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.