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?
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?
Respostas:
"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_IDENTIFIERestiver 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_QUOTESopção está habilitada.
WHERE "nonexistent_column" = 0e 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:
SELECT `column`, `column2` FROM `table`
Para MS SQL, use [e]
SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
Para uso DBASE / DBF [e]
SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]
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!
'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.