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;
Vous pouvez utiliser des guillemets si mode ANSI SQL 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 tique arrière propriétaire s'échappant autrement. (Où trouver le `
caractère sur 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 MySQL, 9.3 Mots réservés )
Vous devez utiliser le caractère de tick arrière (`), par exemple:
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;
Si la portabilité entre différents serveurs SQL vous intéresse, vous devez utiliser les requêtes SQL ANSI. L'échappement de chaîne dans ANSI SQL est effectué à l'aide de guillemets doubles ("). Malheureusement, cette méthode d'échappement n'est pas portable vers MySQL, sauf si elle est définie en mode de compatibilité ANSI.
Personnellement, je démarre toujours mon serveur MySQL avec l'argument --sql-mode = 'ANSI' car cela permet aux deux méthodes de s'échapper. Si vous écrivez des requêtes qui vont être exécutées sur un serveur MySQL non configuré/contrôlé par vous, voici ce que vous pouvez faire:
Incluez-les dans les requêtes spécifiques à MySQL suivantes:
SET @OLD_SQL_MODE=@@SQL_MODE;
SET SESSION SQL_MODE='ANSI';
-- ANSI SQL queries
SET SESSION SQL_MODE=@OLD_SQL_MODE;
Ainsi, les seules requêtes spécifiques à MySQL se trouvent au début et à la fin de votre script .sql. Si vous voulez les envoyer sur un autre serveur, supprimez simplement ces 3 requêtes et vous êtes prêt. Encore plus facilement, vous pouvez créer un script nommé: script_mysql.sql qui contiendrait les requêtes de définition de mode ci-dessus, sourcez un script script_ansi.sql et réinitialisez le mode.