列名をエスケープするSQL標準はありますか?mysqlとsqliteで何が機能しないのですか?sqlserverでも機能しますか?
列名をエスケープするSQL標準はありますか?mysqlとsqliteで何が機能しないのですか?sqlserverでも機能しますか?
回答:
"SQL:1999標準を指定し、二重引用符( ")(というQUOTATION MARKが)の境界を定める識別子に使用されています。
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
Oracle、PostgreSQL、MySQL、MSSQL、およびSQliteはすべて"、識別子の区切り文字としてサポートされています。
すべて"が「デフォルト」として使用されるわけではありません。たとえば、MySQLをANSIモードで実行している必要があり、SQL Serverがサポートしているのは、の場合のみQUOTED_IDENTIFIERですON。
SQLiteによると、
'foo' SQL文字列です"foo" SQL識別子(列/テーブル/その他)[foo] MS SQLの識別子です`foo` MySQLの識別子です修飾名の場合、構文は次のとおりです:"t"."foo"または[t].[foo]、など。
MySQLは、ANSI_QUOTESオプションが有効な場合、標準の「foo」をサポートします。
WHERE "nonexistent_column" = 0、sqliteは私"nonexistent_column"が文字列であるふりをして喜んで実行しました。名前を完全に修飾すると、"my_table"."nonexistent_column"sqliteはより厳密に動作するようになります。
MS SQLの場合[および]
SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
DBASE / DBFの使用[と]
SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]
いくつかの答えをまとめます:
MS SQL(別名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"
追加/編集してください!
'foo'、コンテキストが文字列を許可しない場合は識別子として解釈され、コンテキストが識別子を許可しない"foo"場合は文字列として解釈されることに注意してください。ただし、この動作は将来削除される可能性があります。バージョン。