166 votes

Comment puis-je échapper aux mots réservés utilisés comme noms de colonne? MySQL / Créer une table

Je génère des tables à partir de classes dans .NET et un problème est qu'une classe peut avoir un nom de champ key qui est un mot clé réservé à MySQL. Comment puis-je y échapper dans une instruction create table? (Remarque: L'autre problème ci-dessous est que le texte doit avoir une taille fixe pour être indexé / unique.)

 create table if not exists misc_info (
id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
key TEXT UNIQUE NOT NULL,
value TEXT NOT NULL)ENGINE=INNODB;
 

208voto

Martin Smith Points 174101

Vous pouvez utiliser des guillemets si ANSI SQL mode est activé

CREATE TABLE IF NOT EXISTS misc_info
  (
     id    INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
     "key" TEXT UNIQUE NOT NULL,
     value TEXT NOT NULL
  )
ENGINE=INNODB; 

ou la propriété de retour tique échapper autrement. (Où trouver l' ` de caractère sur les différentes dispositions de clavier est couvert dans cette réponse)

CREATE TABLE IF NOT EXISTS misc_info
  (
     id    INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
     `key` TEXT UNIQUE NOT NULL,
     value TEXT NOT NULL
  )
ENGINE=INNODB; 

(Source: Manuel De Référence De MySQL, 9.3 Mots Réservés)

15voto

Si vous êtes intéressé par la portabilité entre les différents serveurs SQL, vous devez utiliser la norme ANSI SQL des requêtes. L'échappement de la chaîne dans la norme ANSI SQL est fait en utilisant des guillemets doubles ("). Malheureusement, cela s'échapper de la méthode n'est pas portable pour MySQL, à moins qu'il est défini dans la norme ANSI mode de compatibilité.

Personnellement, je commence toujours mon serveur MySQL avec l'option --sql-mode='ANSI' argument car cela permet pour les deux méthodes pour s'échapper. Si vous êtes à l'écriture de requêtes qui vont être exécutés dans un serveur MySQL qui n'était pas d'installation / est contrôlée par vous, voici ce que vous pouvez faire:

  • Écrire tout ce que vous requêtes SQL dans SQL ANSI
  • Placez-les dans la suite de MySQL requêtes spécifiques:

    SET @OLD_SQL_MODE=@@SQL_MODE;
    SET SESSION SQL_MODE='ANSI';`<br/>
    -- ANSI SQL queries
    SET SESSION SQL_MODE=@OLD_SQL_MODE;
    

De cette façon, le seul MySQL requêtes spécifiques sont au début et à la fin de votre .le script sql. Si vous les expédier pour un autre serveur vient de supprimer ces 3 requêtes, et vous êtes tous ensemble. Encore plus pratique, vous pouvez créer un script nommé: script_mysql.sql qui contient la au-dessus de réglage du mode de requêtes, la source a script_ansi.sql script et réinitialiser le mode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X