Erreurs de syntaxe causées par l'utilisation de mots réservés comme noms de tables ou de colonnes dans MySQL
P粉726234648
P粉726234648 2023-10-14 22:05:30
0
1
659

J'essaie d'exécuter une simple requête MySQL comme celle-ci :

INSERT INTO user_details (username, location, key)
VALUES ('Tim', 'Florida', 42)

Mais j'obtiens l'erreur suivante :

Erreur 1064 (42000) : Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel de la version de votre serveur MySQL pour connaître la syntaxe correcte à utiliser près de la ligne 1 'key) VALUES ('Tim', 'Florida', 42)'

Comment résoudre ce problème ?

P粉726234648
P粉726234648

répondre à tous(1)
P粉545910687

Question

Dans MySQL, certains mots tels que SELECTINSERTDELETE sont des mots réservés. Parce qu'ils ont une signification particulière, MySQL la traite comme une erreur de syntaxe chaque fois que 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 10.2 noms d'objets de schéma em> (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 suivis de "(R)" sont des mots réservés. Certains mots réservés sont répertoriés ci-dessous, dont beaucoup ont tendance à provoquer ce problème.

  • Ajouter
  • et
  • avant
  • Auteur
  • Appel
  • CAS
  • Conditions
  • Supprimer
  • Ordre décroissant
  • Description
  • de
  • Groupe
  • à
  • Index
  • Insérer
  • Intervalle
  • Oui
  • Clé
  • AIME
  • Restrictions
  • LONGUE
  • Match
  • Non
  • Options
  • ou
  • Commandez
  • Partition
  • Classement
  • Références
  • Choisissez
  • 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 raisonnable pour votre colonne qui ne soit 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 la 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 créer des pièges pour vous-même ou pour les futurs développeurs.

  • La façon dont les identifiants sont cités diffère selon les dialectes SQL. Alors que MySQL utilise des backticks pour citer les identifiants par défaut, le SQL conforme à ANSI (en fait 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.

Dans le seul but de réduire le risque d'erreurs futures, il s'agit généralement d'une approche plus intelligente que le backticking des identifiants.

2. Utilisez le backtick

Si la table ou la colonne ne peut pas être renommée, entourez l'identifiant en question entre des guillemets (`), comme dans le 10.2 Schema Object Name cité précédemment.

Exemple démontrant 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