Po zmianie typu danych kolumny MySql w celu przechowywania identyfikatorów wywołań Twilio (34 ciągi znaków), próbuję ręcznie zmienić dane w tej kolumnie za pomocą:
update calls
set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d'
where id='1';
Jednak pojawia się błąd, który nie ma sensu, ponieważ typ danych kolumny został poprawnie zmodyfikowany?
| Level ||| Code | Message
| Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1
ALTER TABLES calls MODIFY incoming_Cid STRING;
jest tym, co zrobiłem.STRING
nie jest typem MySQL. Jaki jest Twój silnik bazy danych?Odpowiedzi:
Twoim problemem jest to, że w tej chwili Twoja
incoming_Cid
kolumna została zdefiniowana tak, jakCHAR(1)
powinnaCHAR(34)
.Aby to naprawić, po prostu wydaj to polecenie, aby zmienić długość kolumn z 1 na 34
ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);
Oto demo SQLFiddle
źródło
Miałem ten sam problem z powodu kolumny tabeli, która została zdefiniowana jako ENUM ('x', 'y', 'z') i później próbowałem zapisać wartość 'a' w tej kolumnie, więc otrzymałem wspomniany błąd.
Rozwiązany przez zmianę definicji kolumny tabeli i dodanie wartości „a” do zestawu wyliczeń.
źródło
Wydając to oświadczenie:
ALTER TABLES call MODIFY incoming_Cid CHAR;
... pominąłeś parametr długości. Twoje zapytanie było zatem równoważne z:
ALTER TABLE calls MODIFY incoming_Cid CHAR(1);
W przypadku rozmiarów większych niż 1 musisz określić rozmiar pola:
ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
źródło
Często możesz otrzymać tę wiadomość, gdy robisz coś takiego:
REPLACE INTO table2 (SELECT * FROM table1);
W naszym przypadku wystąpił następujący błąd:
Problemem okazała się niewspółosiowość kolumn, która skutkowała
tinyint
próbą przechowywania wdatetime
polu lub odwrotnie.źródło
W moim przypadku była to tabela z wartością ENUM, która przyjmuje dni tygodnia jako liczby całkowite (od 0 do 6). Podczas wstawiania wartości 0 jako liczby całkowitej otrzymałem komunikat o błędzie „Dane obcięte dla kolumny ...”, więc aby to naprawić, musiałem rzucić liczbę całkowitą na łańcuch. Więc zamiast:
$item->day = 0;
Musiałem zrobić;
$item->day = (string) 0;
To wygląda głupio, aby rzucić zero w ten sposób, ale w moim przypadku było to w fabryce Laravel i musiałem napisać to tak:
$factory->define(App\Schedule::class, function (Faker $faker) { return [ 'day' => (string) $faker->numberBetween(0, 6), // ]; });
źródło
kiedy po raz pierwszy próbowałem zaimportować csv do mysql, dostałem ten sam błąd, a potem zorientowałem się, że utworzona przeze mnie tabela mysql nie ma długości znaków importowanego pola csv, więc jeśli jest to pierwszy raz, gdy importujesz csv
varchar
lubtext
, nie mieszajint
lub inne wartości.wtedy jesteś gotowy.
źródło
Miałem ten sam problem, z polem bazy danych typu „SET”, które jest typem wyliczenia.
Próbowałem dodać wartość, której nie było na tej liście.
Wartość, którą próbowałem dodać, miała wartość dziesiętną 256, ale lista wyliczeń miała tylko 8 wartości.
Musiałem więc po prostu dodać dodatkową wartość do pola.
Przeczytanie tego wpisu dokumentacji pomogło mi zrozumieć problem.
SET Member Decimal Value Binary Value 'a' 1 0001 'b' 2 0010 'c' 4 0100 'd' 8 1000
źródło