Existe um padrão SQL para escapar de um nome de coluna? Se não, o que funciona para mysql e sqlite? também funciona para sqlserver?
96
"
O padrão SQL: 1999 especifica que aspas duplas (") ( QUOTATION MARK ) são usadas para delimitar identificadores.
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
Oracle, PostgreSQL, MySQL, MSSQL e SQlite são compatíveis "
como delimitadores de identificador.
Nem todos eles usam "
como 'padrão'. Por exemplo, você precisa estar executando o MySQL no modo ANSI e o SQL Server só oferece suporte quando QUOTED_IDENTIFIER
estiver ON
.
De acordo com SQLite ,
'foo'
é uma string SQL"foo"
é um identificador SQL (coluna / tabela / etc)[foo]
é um identificador no MS SQL`foo`
é um identificador no MySQLPara nomes qualificados, a sintaxe é: "t"."foo"
ou [t].[foo]
, etc.
O MySQL suporta o padrão "foo" quando a ANSI_QUOTES
opção está habilitada.
'foo'
ser interpretado como um identificador se o contexto não permitir uma string, e"foo"
ser interpretado como uma string se o contexto não permitir um identificador, embora haja uma observação de que este comportamento pode ser removido no futuro versões.WHERE "nonexistent_column" = 0
e o sqlite executou-o felizmente fingindo que"nonexistent_column"
era uma string. Qualificar totalmente o nome como"my_table"."nonexistent_column"
força o sqlite a se comportar de maneira mais restrita.foo
,"foo"
e'foo'
não funcionou para mim com MySQL. É necessário backticks. E para piorar as coisas, o MySQL estava fornecendo mensagens de erro inúteis .Para MySQL, use back ticks `.
Por exemplo:
fonte
Para MS SQL, use [e]
fonte
Para uso DBASE / DBF
[
e]
fonte
Juntando algumas respostas:
MS SQL (também conhecido como 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"
Adicione / edite!
fonte