Erreur de syntaxe MySQL : problèmes causés par l'utilisation de mots réservés comme noms de tables ou de colonnes
P粉937769356
P粉937769356 2023-08-21 20:17:23
0
1
449
<p>J'essaie d'exécuter la requête MySQL simple suivante : </p> <pre class="brush:sql;toolbar:false;">INSERT INTO user_details (nom d'utilisateur, emplacement, clé) VALEURS ('Tim', 'Florida', 42) ≪/pré> <p>Mais j'obtiens l'erreur suivante :</p> <blockquote> <p>ERREUR 1064 (42000) : Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MySQL pour connaître la bonne syntaxe à utiliser près de <code>'key) VALEURS ('Tim', ' Floride', 42)'&Lt ;/code> ; à la ligne 1&Lt ;/p> ; </blockquote> <p>Comment résoudre ce problème ? </p>
P粉937769356
P粉937769356

répondre à tous(1)
P粉541796322

Question

Dans MySQL, certains mots tels que SELECTINSERTDELETE sont des mots réservés. Parce qu'ils ont une signification particulière, MySQL les traite comme une erreur de syntaxe lorsque vous les utilisez comme noms de tables, noms de colonnes ou autres types d'identifiants - à moins que vous ne mettiez l'identifiant entre des guillemets.

Comme indiqué dans la documentation officielle, dans la section 10.2 Noms des objets de schéma (c'est nous qui soulignons) :

La liste complète des mots-clés et mots réservés se trouve dans la section 10.3 Mots-clés et mots réservés . Dans cette page, les mots avec "(R)" sont des mots réservés. Certains mots réservés sont répertoriés ci-dessous, dont beaucoup peuvent être à l'origine de ce problème.

  • AJOUTER
  • ET
  • AVANT
  • PAR
  • APPEL
  • CAS
  • ÉTAT
  • SUPPRIMER
  • DESC
  • DÉCRIRE
  • DE
  • GROUPE
  • EN
  • INDEX
  • INSÉRER
  • INTERVAL
  • EST
  • CLÉ
  • AIME
  • LIMITE
  • LONGUE
  • MATCH
  • PAS
  • OPTION
  • OU
  • COMMANDE
  • PARTITION
  • CLASSEMENT
  • RÉFÉRENCES
  • SÉLECTIONNER
  • TABLE
  • À
  • MISE À JOUR

Solution

Vous avez deux options.

1. N'utilisez pas de mots réservés comme identifiants

La solution la plus simple est d'éviter d'utiliser des mots réservés comme identifiants. Vous pourrez peut-être trouver un autre nom de colonne raisonnable qui n'est pas un mot réservé.

Il y a plusieurs avantages à faire cela :

  • Cela élimine la possibilité que vous ou d'autres développeurs travaillant avec votre base de données écriviez accidentellement des erreurs de syntaxe parce qu'ils ont oublié ou ne savaient pas qu'un identifiant spécifique était un mot réservé. Il existe de nombreux mots réservés dans MySQL et il est peu probable que la plupart des développeurs les connaissent tous. En n’utilisant pas ces mots en premier lieu, vous évitez de tendre un piège à vous-même ou aux futurs développeurs.

  • La façon dont les identifiants sont cités diffère selon les dialectes SQL. Alors que MySQL utilise des guillemets pour citer les identifiants par défaut, SQL conforme à ANSI (et MySQL en mode ANSI SQL, comme décrit ici) utilise des guillemets doubles pour citer les identifiants. Par conséquent, les requêtes qui utilisent des backticks pour citer les identifiants sont moins portables vers d’autres dialectes SQL.

Pour réduire les risques d'erreurs futures, il est souvent plus judicieux que de citer les identifiants avec des backticks.

2. Utilisez des backticks

Si la table ou la colonne ne peut pas être renommée, entourez-la entre guillemets () comme décrit dans la section 10.2 Noms d'objet de schéma ` précédemment référencée.

Voici un exemple illustrant l'utilisation (tiré de 10.3 Mots-clés et mots réservés) :

Encore une fois, la requête dans la question peut être corrigée en enveloppant le mot-clé key entre des guillemets, comme ceci :

INSERT INTO user_details (username, location, `key`)
VALUES ('Tim', 'Florida', 42)";               ^   ^
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal