I diversi database usano virgolette differenti?

Ad esempio, il nome della tabella delle quote mysql viene utilizzato

SELECT * FROM `table_name`; 

nota il `

L’altro database usa mai caratteri diversi per citare il nome della tabella

Questo uso di virgolette è chiamato identificatori delimitati. È una parte importante di SQL perché altrimenti non è ansible utilizzare identificativi (ad esempio nomi di tabelle e nomi di colonne) che:

  • Includere spazi bianchi: “il mio tavolo”
  • Includi caratteri speciali e segni di punteggiatura: “my-table”
  • Includi caratteri internazionali: “私 の テ ー ブ ル”
  • Sono sensibili al maiuscolo / minuscolo: “MyTable”
  • Abbina parole chiave SQL: “tabella”

Il linguaggio SQL standard utilizza virgolette doppie per gli identificatori delimitati:

 SELECT * FROM "my table"; 

MySQL utilizza le virgolette per impostazione predefinita. MySQL può usare doppie virgolette standard:

 SELECT * FROM `my table`; SET GLOBAL SQL_MODE=ANSI_QUOTES; SELECT * FROM "my table"; 

Microsoft SQL Server utilizza le parentesi per impostazione predefinita. Microsoft può utilizzare doppie virgolette standard:

 SELECT * FROM [my table]; SET QUOTED_IDENTIFIER ON; SELECT * FROM "my table"; 

InterBase e Firebird devono impostare il dialetto SQL su 3 per supportare identificatori delimitati.

La maggior parte delle altre marche di database usa correttamente le virgolette doppie.

SQL Server utilizza [parentesi quadre] o “virgolette doppie” quando l’opzione QUOTED_IDENTIFIER è ON.

Credo che le doppie virgolette siano nello standard SQL-92.

In breve, sì.

Lo standard SQL utilizza virgolette doppie attorno al nome per indicare un “identificatore delimitato”.

Informix utilizza per impostazione predefinita le virgolette singole e doppie in modo intercambiabile per indicare le stringhe di caratteri. Tuttavia, impostando la variabile di ambiente DELIMIDENT è ansible triggersre il comportamento standard SQL: virgolette singole attorno a stringhe e virgolette su identificatori delimitati.

Altre persone hanno elencato altri comportamenti per altri DBMS; Non ho bisogno di ripetere quelli.