Gibt es einen SQL-Standard, um einen Spaltennamen zu umgehen? Wenn nicht, was funktioniert für MySQL und SQLite? funktioniert es auch für sqlserver?
96
"
Der SQL: 1999- Standard gibt an, dass doppelte Anführungszeichen (") ( QUOTATION MARK ) zum Abgrenzen von Bezeichnern verwendet werden.
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
Oracle, PostgreSQL, MySQL, MSSQL und SQlite unterstützen alle "
als Bezeichnerbegrenzer.
Sie werden nicht alle "
als "Standard" verwendet. Beispielsweise müssen Sie MySQL im ANSI-Modus ausführen, und SQL Server unterstützt dies nur, wenn dies der Fall QUOTED_IDENTIFIER
ist ON
.
Nach SQLite ,
'foo'
ist eine SQL-Zeichenfolge"foo"
ist eine SQL-Kennung (Spalte / Tabelle / usw.)[foo]
ist eine Kennung in MS SQL`foo`
ist eine Kennung in MySQLFür qualifizierte Namen lautet die Syntax: "t"."foo"
oder [t].[foo]
usw.
MySQL unterstützt den Standard "foo", wenn die ANSI_QUOTES
Option aktiviert ist.
'foo'
Interpretation als Bezeichner zulässt , wenn der Kontext keine Zeichenfolge zulässt, und"foo"
die Interpretation als Zeichenfolge, wenn der Kontext keinen Bezeichner zulässt. Es wird jedoch darauf hingewiesen, dass dieses Verhalten möglicherweise in Zukunft entfernt wird Versionen.WHERE "nonexistent_column" = 0
und sqlite hat es einfach glücklich ausgeführt und so getan,"nonexistent_column"
als wäre es eine Zeichenfolge. Die vollständige Qualifizierung des Namens als"my_table"."nonexistent_column"
zwingt SQLite dazu, sich strenger zu verhalten.foo
,"foo"
Und'foo'
für mich nicht mit MySQL arbeiten. Es waren Backticks erforderlich. Und um die Sache noch schlimmer zu machen, lieferte MySQL nutzlose Fehlermeldungen .Verwenden Sie für MySQL Back Ticks `.
Zum Beispiel:
quelle
Verwenden Sie für MS SQL [und]
quelle
Für DBASE / DBF verwenden Sie
[
und]
quelle
Einige Antworten zusammenstellen:
MS SQL (auch bekannt als T-SQL), Microsoft Access SQL, DBASE / DBF:
SELECT [COLUMN], [COLUMN2] FROM [TABLE]
MySQL:
SELECT `COLUMN`, `COLUMN2` FROM `TABLE`
SQLite, Oracle, Postgresql:
SELECT "COLUMN", "COLUMN2" FROM "TABLE"
Bitte hinzufügen / bearbeiten!
quelle