Is there a SQL standard to escape a column name? If not what works for MySQL and SQLite? does it also work for SQL Server?
6 Answers
Quotation Mark "
The SQL:1999 standard specifies that double quote (") (QUOTATION MARK) is used to delimit identifiers.
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote> Oracle, PostgreSQL, MySQL, MSSQL and SQlite all support " as the identifier delimiter.
They don't all use " as the 'default'. For example, you have to be running MySQL in ANSI mode and SQL Server only supports it when QUOTED_IDENTIFIER is ON.
Comments
According to SQLite,
'foo'is an SQL string"foo"is an SQL identifier (column/table/etc)[foo]is an identifier in MS SQL`foo`is an identifier in MySQL
For qualified names, the syntax is: "t"."foo" or [t].[foo], etc.
MySQL supports the standard "foo" when the ANSI_QUOTES option is enabled.
4 Comments
'foo' to be interpreted as an identifier if the context wouldn't allow a string, and "foo" to be interpreted as a string if the context wouldn't allow an identifier, though there is a note that this behaviour may be removed in future versions.WHERE "nonexistent_column" = 0 and sqlite just happily executed it pretending that my "nonexistent_column" was a string. Fully qualifying the name as "my_table"."nonexistent_column" forces sqlite into behaving more strictly.foo, "foo" and 'foo' did not work for me with MySQL. It required backticks. And to make matters worse, MySQL was providing useless error messages.For MS SQL use [ and ]
SELECT [COLUMN], [COLUMN 2] FROM [TABLE] If the column name contains a ], then escape it by doubling it, so a column named "Column with [brackets]" would be escaped as [Column with [brackets]]].
5 Comments
SET QUOTED_IDENTIFIER. SQL Server (and other DBMSes, like MySQL, Maria, and Oracle DB) allow identifiers to have spaces, if they're quoted.Putting some answers together:
MS SQL (a.k.a. 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"
Please add/edit!
1 Comment
select 3.14/6 as "A ""slice"" of pi" returns A "slice" of pi with value 0.52333