Rdbms

是否存在不允許列名引用/轉義的主要 RDBMS?

  • December 6, 2012

標題基本上是這樣說的:是否有任何主要的數據庫不處理列名引用/轉義?

例如,假設我想要一個名為的列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 Smithdelimited identifierSQL-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 站點,如果您知道其他人也支持這一點,請隨時編輯答案並在您有足夠代表的情況下直接添加它們。如果您不這樣做,只需發表評論,我會將它們折疊起來。 )

引用自:https://dba.stackexchange.com/questions/29815