Ich generiere Tabellen aus Klassen in .NET und ein Problem ist, dass eine Klasse möglicherweise einen Feldnamen hat, key
der ein reserviertes MySQL-Schlüsselwort ist. Wie kann ich es in einer create table-Anweisung umgehen? (Hinweis: Das andere Problem unten ist, dass Text eine feste Größe haben muss, um indiziert / eindeutig zu sein.)
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;
Sie sollten das Back-Tick-Zeichen (`) verwenden, z.
quelle
Wenn Sie an der Portabilität zwischen verschiedenen SQL-Servern interessiert sind, sollten Sie ANSI-SQL-Abfragen verwenden. Das Escapezeichenfolgen in ANSI SQL erfolgt in doppelten Anführungszeichen ("). Leider ist diese Escapezeichenmethode nicht auf MySQL portierbar, es sei denn, sie ist im ANSI-Kompatibilitätsmodus festgelegt.
Persönlich starte ich meinen MySQL-Server immer mit dem Argument --sql-mode = 'ANSI', da dies beide Escape-Methoden ermöglicht. Wenn Sie Abfragen schreiben, die auf einem MySQL-Server ausgeführt werden sollen, der nicht von Ihnen eingerichtet wurde / wird, können Sie Folgendes tun:
Schließen Sie sie in die folgenden MySQL-spezifischen Abfragen ein:
Auf diese Weise befinden sich die einzigen MySQL-spezifischen Abfragen am Anfang und am Ende Ihres SQL-Skripts. Wenn Sie sie für einen anderen Server versenden möchten, entfernen Sie einfach diese 3 Abfragen und schon sind Sie fertig. Noch bequemer können Sie ein Skript mit dem Namen script_mysql.sql erstellen, das die oben genannten Abfragen zur Einstellung des Modus enthält, ein Skript script_ansi.sql als Quelle verwenden und den Modus zurücksetzen.
quelle