有没有办法处理保留的表&您的应用中的列名称可以通过各种数据库工作,如Oracle,MySQL,SQL Server,PostGreSQL等。
目前,我必须执行以下操作:
Oracle - 使用双引号。 MySQL - 使用反引号或双引号(取决于是否启用了ANSI_QUOTES模式) SQL Server - 使用括号 PostGreSQL - 使用双引号。
我知道ANSI标准声明使用双引号,但遗憾的是并非所有dbms似乎都支持它们。
答案 0 :(得分:6)
使用双引号。这就是标准所说的,而且令人惊讶的是,它实际上适用于大多数平台。
要求MySQL启用ANSI_QUOTES
,或set it at the session level:
SET SESSION sql_mode = 'ANSI'
(我在这里使用ANSI
而不只是ANSI_QUOTES
,因为它使得MySQL通常更加健全。)
PostgreSQL不需要对标识符进行任何特殊设置(尽管非常旧的版本需要standard_conforming_strings = on
来合理地处理文字)。
Oracle也没有。
现代MS-SQL shouldn't require any special settings to support double quoted identifiers:
当SET QUOTED_IDENTIFIER为ON(默认)时,所有用双引号分隔的字符串都被解释为对象标识符
文档建议在MS-SQL 2008中就是这种情况,如果您仍然关心新应用程序中的2005,则会遇到更大的问题。
SQLFiddles:
有趣的是,我发现PostgreSQL的SQLFiddle失败并出现奇怪的错误。我怀疑是一个SQLFiddle错误,因为它在PostgreSQL命令行和PgJDBC上都很好。它失败了there is no table that match the following pattern [with]
。
所有这一切,如果您正在认真尝试编写ANSI SQL,我希望您不打算使用:
因为不同的供应商使用不同的名称,对功能有不同的支持等等。
(另一方面,如果我遇到决定在黑暗的小巷中调用Microsoft SQL Server“SQL”的人......)