Jeśli zauważysz błąd, który brzmi mniej więcej tak:„BŁĄD 1136 (21S01):liczba kolumn nie odpowiada liczbie wartości w wierszu ” w MariaDB jest to prawdopodobnie spowodowane określeniem nieprawidłowej liczby wyrażeń dla liczby kolumn w kolumnie podczas próby wstawienia danych do tabeli.
Innymi słowy, próbujesz wstawić za dużo lub za mało kolumn.
Aby naprawić, dostosuj INSERT
oświadczenie, aby wstawić poprawną liczbę wartości do tabeli.
Możesz również nazwać kolumny w swoim INSERT
oświadczenie, aby MariaDB wiedziała, do których kolumn należy wstawić każde wyrażenie.
Przykład błędu
Załóżmy, że mamy następującą tabelę:
+-------+---------+---------+ | PetId | PetName | PetType | +-------+---------+---------+ | 1 | Fluffy | Cat | | 2 | Tweet | Bird | +-------+---------+---------+
Poniższy kod spowoduje błąd:
INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog', 'Brown' );
Wynik:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
W tym przypadku próbowałem wstawić dane dla czterech kolumn do tabeli, która ma tylko trzy kolumny.
Otrzymamy ten sam błąd, jeśli spróbujemy wstawić za mało kolumn:
INSERT INTO Pets VALUES ( 3, 'Wag' );
Wynik:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
Rozwiązanie 1
Oczywistym rozwiązaniem jest wstawienie odpowiedniej liczby wierszy. Dlatego możemy przepisać nasz kod w następujący sposób:
INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog' );
Wynik:
Query OK, 1 row affected (0.010 sec)
Rozwiązanie 2
Innym sposobem na zrobienie tego jest jawne nazwanie kolumn, dla których chcemy wstawić dane. Ta technika może być wykorzystana do wstawienia mniejszej liczby kolumn niż w tabeli.
Przykład:
INSERT INTO Pets ( PetId, PetName ) VALUES ( 3, 'Wag' );
Wynik:
Query OK, 1 row affected (0.005 sec)
Ta metoda może spowodować inny błąd, jeśli istnieją ograniczenia, które wymagają przekazania wartości dla tej kolumny (na przykład, jeśli tabela zawiera NOT NULL
ograniczenia na tej kolumnie). Dlatego musisz upewnić się, że przestrzegasz wszelkich ograniczeń dotyczących kolumny, gdy to robisz.