Mysql 在可以在不同数据库服务器上运行的查询中使用保留字

Mysql 在可以在不同数据库服务器上运行的查询中使用保留字,mysql,sql,database,postgresql,Mysql,Sql,Database,Postgresql,我在一些SELECT查询中使用了倒勾(`)来转义字段,例如“first name”。这将在MySQL上起作用。这些查询通过php应用程序中的DBO类运行,我希望该应用程序能够使用其他数据库服务器,如MSSQL和Posgres 允许在所有这些数据库服务器中使用有问题的字段名的最佳方法是什么?我正在考虑将字段作为数组,并使用适合每个字段的转义字符引用它们 [编辑] 澄清一下:我正在构建一个工具,用于将php应用程序中存储的配置映射到外部数据库的字段。作为预防措施,我想避开这些问题,因为我不知道查询中

我在一些SELECT查询中使用了倒勾(`)来转义字段,例如“first name”。这将在MySQL上起作用。这些查询通过php应用程序中的DBO类运行,我希望该应用程序能够使用其他数据库服务器,如MSSQL和Posgres

允许在所有这些数据库服务器中使用有问题的字段名的最佳方法是什么?我正在考虑将字段作为数组,并使用适合每个字段的转义字符引用它们

[编辑]
澄清一下:我正在构建一个工具,用于将php应用程序中存储的配置映射到外部数据库的字段。作为预防措施,我想避开这些问题,因为我不知道查询中将映射到并使用哪些字段名。

解决方案非常简单:不要使用保留字作为标识符。这使得代码更难阅读


如果你真的需要使用这样的词(比如“有一些你无法控制的模糊原因”),你可以用一个任意字符作为你所有标识符的前缀,例如

解决方法很简单:不要使用保留词作为标识符。这使得代码更难阅读


如果您真的需要使用这些词(如“有一些模糊的原因超出了您的控制”),您可以使用任意字符作为所有标识符的前缀,例如

正确的转义方法是不使用需要转义的字段名

如果仍然必须使用转义,请使用
。这是标准转义(由ANSI SQL定义)


Postgres和Oracle理解
转义。但是我不知道MSSQL和MySQL。正确的转义方法是不要使用需要转义的字段名

如果仍然必须使用转义,请使用
。这是标准转义(由ANSI SQL定义)

Postgres和Oracle理解
转义。但是我不知道MSSQL和MySQL。

跨DBMS机制(如SQL-92和其他标准中定义的)使用双引号分隔标识符。据报道,它得到了广泛的支持

MySQL不允许这样做,因此在发出任何查询之前,您仍然需要确保会话设置是正确的。

跨DBMS机制(如SQL-92和其他标准中定义的)使用双引号分隔标识符。据报道,它得到了广泛的支持

MySQL不允许这样做,所以在发出任何查询之前,您仍然需要确保会话设置是正确的。

MySQL默认使用反勾号(`),但可以配置为支持正确的ANSI引号

IMO:如果您正在连接MySQL,请将其设置为ANSI模式,同时启用它的所有严格选项。然后编写可移植的代码就变得容易多了

当然,最好的选择是不使用保留字,但是保留字的列表会随着时间的推移而改变,所以严格引用并不是一个坏主意。

MySQL默认使用倒勾(`),但可以配置为支持正确的ANSI引用

IMO:如果您正在连接MySQL,请将其设置为ANSI模式,同时启用它的所有严格选项。然后编写可移植的代码就变得容易多了


当然,最好的选择是不使用保留字,但保留字的列表会随着时间的推移而变化,因此严格引用并不是一个坏主意。

据我所知,没有标准的方法可以在DB供应商之间转义保留字。您可以更改列名吗?据我所知,没有标准的方法可以跨DB供应商转义保留字。您可以更改列名吗?Microsoft和MySQL也支持标准引号-它们只需要正确配置(即符合ANSI)。Microsoft和MySQL也支持标准引号-它们只需要正确配置(即符合ANSI)。我可能会使用
\uu
作为后缀,而不是前缀,以便表名可以“正确”排序,例如在GUI工具中。但这主要是个人喜好…我可能会使用
\uuuu
作为后缀,而不是前缀,以便表名可以“正确”排序,例如在GUI工具中。但这主要是个人品味。。。