Rdbms
是否存在不允許列名引用/轉義的主要 RDBMS?
標題基本上是這樣說的:是否有任何主要的數據庫不處理列名引用/轉義?
例如,假設我想要一個名為的列
FROM
(假設我有一個非常好的理由)。在每個基於 SQL 的 RDBMS 中,這自然是一個關鍵字。在 MS SQL Server 中,我可以使用[
and對其進行轉義]
:CREATE TABLE FOO ( [FROM] VARCHAR(255) )
MySQL 使用反引號
CREATE TABLE FOO ( `FROM` VARCHAR(255) )
同樣,Oracle 和 Postegres 使用雙引號。
是否有任何主要的 RDBMS不支持以一種或另一種方式引用/轉義列名?
正如Leigh Riffel所說,我的問題的答案部分取決於您所說的“主要”是什麼意思。
我要:不,沒有主要的 RDBMS 引擎無法處理名稱轉義/引用。帶引號/轉義的名稱顯然正確地稱為分隔標識符。
Martin Smith
delimited identifier
在SQL-92 規範中指出:<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
現在,遵循規範的程度差異很大,但是……
我已經驗證了以下引擎:
- Microsoft SQL Server
"name"
至少早在 SQL Server 2000 就支持標準(以及它自己的非標準[name]
)- Oracle支持標準
- MySQL預設使用反引號(
name
),但如果你設置SET GLOBAL SQL_MODE=ANSI_QUOTES;
它支持標準- Postgres支持標準
- SQLite (我說*這取決於你所謂的“主要”)*支持標準和 SQL Server 的
[name]
我認為前四個覆蓋了絕大多數安裝,第五個對於嵌入式數據庫工作很重要(如下列表中的幾個)。
a_horse_with_no_name告訴我們所有這些都支持它:
- Sybase(他說 Sybase 做起來像微軟)
- DB2
- 阿帕奇德比
- H2
- 數據庫
(這是一個 Stack Exchange 站點,如果您知道其他人也支持這一點,請隨時編輯答案並在您有足夠代表的情況下直接添加它們。如果您不這樣做,只需發表評論,我會將它們折疊起來。 )