Ett av de vanligaste felmeddelandena i MySQL lyder så här:"ERROR 1136 (21S01):Kolumnantal matchar inte värderäkning på rad 1 ".
Det här felet uppstår vanligtvis när du försöker infoga data i en tabell, men antalet kolumner som du försöker infoga matchar inte antalet kolumner i tabellen.
Med andra ord försöker du antingen infoga för många kolumner eller inte tillräckligt många kolumner.
För att åtgärda det här problemet, se till att du infogar rätt antal kolumner i tabellen.
Alternativt kan du namnge kolumnerna i din INSERT
uttalande så att MySQL vet vilka kolumner din data behöver infogas i.
Felet kan också uppstå om du skickar fel antal kolumner till en ROW()
sats när du använder VALUES
uttalande.
Exempel på fel
Anta att vi har följande tabell:
+----------+----------+----------+ | column_0 | column_1 | column_2 | +----------+----------+----------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +----------+----------+----------+
Följande kod kommer att orsaka felet:
INSERT INTO t1 VALUES (7, 8, 9, 10);
Resultat:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
I det här fallet försökte jag infoga data för fyra kolumner i en tabell som bara har tre kolumner.
Vi får samma felmeddelande om vi försöker infoga för få kolumner:
INSERT INTO t1 VALUES (7, 8);
Resultat:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
Lösning 1
Den självklara lösningen är att infoga rätt antal rader. Därför kan vi skriva om vår kod enligt följande:
INSERT INTO t1 VALUES (7, 8, 9);
Resultat:
Query OK, 1 row affected (0.00 sec)
Lösning 2
Ett annat sätt att göra det är att uttryckligen namnge de kolumner som vi vill infoga data för. Denna teknik kan användas för att infoga färre kolumner än i tabellen.
Exempel:
INSERT INTO t1 (column_0, column_1) VALUES (7, 8);
Resultat:
Query OK, 1 row affected (0.00 sec)
Den här metoden kan resultera i ett annat fel om det finns några begränsningar som kräver att ett värde skickas för den kolumnen (till exempel om tabellen har en NOT NULL
begränsning för den kolumnen). Därför måste du se till att du följer alla begränsningar i kolumnen när du gör detta.