Mysql
 sql >> Database >  >> RDS >> Mysql

Sfuggire a una barra in avanti in un nome SQL? È possibile eseguire l'escape, ma SQL ritiene che siano più colonne

In SQL Server, gli identificatori possono essere delimitati utilizzando parentesi quadre, ad esempio

SELECT [gallons/units] ...

In MySQL, gli identificatori possono essere delimitati usando i backtick, ad es.

SELECT `gallons/units` ...

(NOTA:se MySQL SQL_MODE include ANSI_QUOTES , quindi le virgolette doppie vengono trattate come delimitatori per gli identificatori, in modo simile al modo in cui Oracle gestisce le virgolette doppie; in assenza di tale impostazione, le virgolette doppie vengono gestite come delimitatori per le stringhe letterali. Con ANSI_QUOTES incluso SQL_MODE , "gallons/units" sarà interpretato come un identificatore (nome della colonna). Senza ANSI_QUOTES , MySQL lo vedrà come una stringa letterale, come se fosse racchiuso tra virgolette singole.)

SEGUITO:

Per quanto riguarda un errore "operand should contain only 1 column(s)" , di solito è un problema con la semantica della query, non con l'escape degli identificatori.

Una sottoquery nell'elenco SELECT può restituire solo una singola espressione, ad esempio, questo genererebbe un errore:

Query: SELECT 'foo' , ( SELECT 'fee' AS fee, 'fi' AS fi )

Error Code: 1241
Operand should contain 1 column(s)