web-dev-qa-db-fra.com

"Colonne inconnue dans 'liste de champs'", mais la colonne existe

DROP TABLE IF EXISTS `transactions`;
CREATE TABLE `transactions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `purchase_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `transactions` (`purchase_date`) VALUES (NULL)

J'ai isolé mon problème dans ce code. Quand je le lance, j'obtiens l'erreur:

[ERREUR dans la requête 3] Colonne inconnue 'date_achat' dans 'liste de champs'

Quelqu'un a une idée?

11
Rits

Un caractère non imprimable 30 (RecordSeparator) est inséré entre purchase_date et ' dans l'instruction INSERT. Supprimez simplement le texte ('purchase_date') et réécrivez-le à la main.

17
whetstone

Nery niche solution quand j'ai eu cette erreur. 

J'ai eu un déclencheur BEFORE INSERT sur ma table qui a fait quelque chose avec NEW.`field_mysql_doesnt_think_exists` et si je ne transmettais pas ce champ à une instruction insert, alors j'aurais 

[ERROR in query 3] Unknown column 'field_mysql_doesnt_think_exists' in 'field list'

4
Lewis

Je viens de passer la plus grande partie de la journée à comprendre cela. Mon problème était le même: des caractères invisibles kiboshing la requête et renvoyant l'erreur "colonne inconnue". 

Je l'ai résolu en revenant dans Windows et en supprimant la corbeille à l'aide de NotePad ++.

Comment les ordures sont-elles entrées là en premier lieu? Je pense que c’est parce que j’ai commis l’erreur de copier des requêtes longues et complexes dans LibreOffice Writer (mon document de spécifications fonctionnelles) au lieu de simplement les mettre en favoris dans phpMyAdmin ou de les enregistrer dans un éditeur de texte. Les coller de LibreOffice dans la fenêtre de requête est l’origine (j’estime) des déchets.

Une fois là-bas, il a persisté comme le paludisme. Je ne pouvais même pas m'en débarrasser en retapant à la main l'intégralité de la requête. Je devais l'insérer dans le Bloc-notes ++ (menu Encodage), afficher l'ANSI et les combos UTF8, puis éliminer manuellement les ordures.

Une fois cela fait, la requête a fonctionné.

3
prokaryote

Cela peut également arriver si vous collez un nom de colonne lors de la construction de la structure de la table. Même erreur - mais les caractères non imprimables/invisibles se trouvent dans la structure de la table, pas dans la requête.

2
designgroop

Même erreur dans un scénario différent:

Cela se produit également lorsque vous manquez le symbole @ pour une variable.

SET @myVar1=1;  SELECT @myVar1;  -- GOOD, correctly prints:  1
SET @myVar1=1;  SELECT  myVar1;  -- BAD, prints:  Unknown column 'myVar1' in 'field list' 
0

Cela n’aidera peut-être personne d’autre, mais ajouter ceci «au cas où» aiderait quelqu'un. 

Dans ma situation, c'était une solution différente.

Je reçois des ensembles de données volumineux sous forme de fichiers CSV Excel et utilise un script (WIL) pour convertir le fichier .csv en un fichier .sql à importer. J'ai eu une erreur dans mon script dans laquelle ces deux lignes ne faisaient pas référence au même nom de table (j'avais codé en dur le premier emplacement et oublié de le mettre à jour):

* "INSERT INTO `old_table_name` (`cid`, `date`, etc etc"
* "CREATE TABLE IF NOT EXISTS `":_dbName:"` (etc etc "

Je viens de changer la première ligne pour obtenir également le nom de la table à partir de la variable, et le tour est joué!

* "INSERT INTO `":_dbName:"` (`cid`, `date`, etc etc"

Vérifiez donc ces deux lignes dans votre fichier d'importation SQL.

0
gibberish