Je génère des tables à partir de classes en .NET et un problème est qu'une classe peut avoir un nom de champ key
qui est un mot clé MySQL réservé. Comment puis-je l'é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 devez utiliser le caractère de coche arrière (`), par exemple:
la source
Si vous êtes intéressé par la portabilité entre différents serveurs SQL, vous devez utiliser les requêtes ANSI SQL. L'échappement de chaîne dans ANSI SQL se fait en utilisant des guillemets doubles ("). Malheureusement, cette méthode d'échappement n'est pas portable sur 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 qui n'a pas été configuré / contrôlé par vous, voici ce que vous pouvez faire:
Incluez-les dans les requêtes spécifiques MySQL suivantes:
De cette façon, les seules requêtes spécifiques à MySQL se trouvent au début et à la fin de votre script .sql. Si vous voulez les expédier pour un serveur différent, supprimez simplement ces 3 requêtes et vous êtes prêt. Encore plus commodément, vous pouvez créer un script nommé: script_mysql.sql qui contiendrait les requêtes de réglage de mode ci-dessus, créer un script script_ansi.sql et réinitialiser le mode.
la source