¿Existe un estándar SQL para escapar de un nombre de columna? Si no, ¿qué funciona para MySQL y SQLite? ¿también funciona para SQL Server?
98
"
El estándar SQL: 1999 especifica que se utilizan comillas dobles (") ( COMPROMISO ) para delimitar los identificadores.
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
Oracle, PostgreSQL, MySQL, MSSQL y SQlite son compatibles "
como delimitadores de identificadores.
No todos se utilizan "
como "predeterminados". Por ejemplo, debe ejecutar MySQL en modo ANSI y SQL Server solo lo admite cuando lo QUOTED_IDENTIFIER
está ON
.
Según SQLite ,
'foo'
es una cadena SQL"foo"
es un identificador SQL (columna / tabla / etc.)[foo]
es un identificador en MS SQL`foo`
es un identificador en MySQLPara nombres calificados, la sintaxis es: "t"."foo"
o [t].[foo]
, etc.
MySQL admite el estándar "foo" cuando la ANSI_QUOTES
opción está habilitada.
'foo'
ser interpretado como un identificador si el contexto no permite una cadena, y"foo"
puede ser interpretado como una cadena si el contexto no permite un identificador, aunque hay una nota de que este comportamiento puede eliminarse en el futuro. VersionesWHERE "nonexistent_column" = 0
y sqlite lo ejecutó felizmente pretendiendo que mi"nonexistent_column"
era una cadena. Calificar completamente el nombre como"my_table"."nonexistent_column"
obliga a sqlite a comportarse de manera más estricta.foo
,"foo"
y'foo'
no me funcionó con MySQL. Requería comillas inversas. Y para empeorar las cosas, MySQL estaba proporcionando mensajes de error inútiles .Para MySQL, use ticks `.
Por ejemplo:
fuente
Para uso de MS SQL [y]
fuente
Para uso de DBASE / DBF
[
y]
fuente
Juntando algunas respuestas:
MS SQL (también conocido 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"
¡Agregue / edite!
fuente