Si vous obtenez une erreur qui lit quelque chose comme "ERREUR 1136 (21S01) :le nombre de colonnes ne correspond pas au nombre de valeurs à la ligne " dans MariaDB, c'est probablement parce que vous avez spécifié le mauvais nombre d'expressions pour le nombre de colonnes dans la colonne lorsque vous essayez d'insérer des données dans une table.
En d'autres termes, vous essayez d'insérer trop de colonnes ou pas assez de colonnes.
Pour corriger, ajustez votre INSERT
instruction pour insérer le nombre correct de valeurs dans la table.
Vous pouvez également nommer les colonnes dans votre INSERT
afin que MariaDB sache dans quelles colonnes chaque expression doit être insérée.
Exemple d'erreur
Supposons que nous ayons le tableau suivant :
+-------+---------+---------+ | PetId | PetName | PetType | +-------+---------+---------+ | 1 | Fluffy | Cat | | 2 | Tweet | Bird | +-------+---------+---------+
Le code suivant provoquera l'erreur :
INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog', 'Brown' );
Résultat :
ERROR 1136 (21S01): Column count doesn't match value count at row 1
Dans ce cas, j'ai essayé d'insérer des données pour quatre colonnes dans une table qui n'a que trois colonnes.
Nous aurons la même erreur si nous essayons d'insérer trop peu de colonnes :
INSERT INTO Pets VALUES ( 3, 'Wag' );
Résultat :
ERROR 1136 (21S01): Column count doesn't match value count at row 1
Solution 1
La solution évidente consiste à insérer le nombre correct de lignes. Par conséquent, nous pourrions réécrire notre code comme suit :
INSERT INTO Pets VALUES ( 3, 'Wag', 'Dog' );
Résultat :
Query OK, 1 row affected (0.010 sec)
Solution 2
Une autre façon de procéder consiste à nommer explicitement les colonnes pour lesquelles nous voulons insérer des données. Cette technique peut être utilisée pour insérer moins de colonnes qu'il n'y en a dans le tableau.
Exemple :
INSERT INTO Pets ( PetId, PetName ) VALUES ( 3, 'Wag' );
Résultat :
Query OK, 1 row affected (0.005 sec)
Cette méthode peut entraîner une erreur différente s'il existe des contraintes qui nécessitent qu'une valeur soit transmise pour cette colonne (par exemple, si la table a un NOT NULL
contrainte sur cette colonne). Par conséquent, vous devrez vous assurer que vous respectez toutes les contraintes sur la colonne lors de cette opération.