1

我在一些 SELECT 查询中使用了反引号 (`) 来转义诸如“名字”之类的字段。这将适用于 MySQL。这些查询通过 php 应用程序中的 DBO 类运行,我希望该应用程序能够使用其他数据库服务器,例如 MSSQL 和 Posgres。

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

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

4

4 回答 4

4

解决方法很简单:不要使用保留字作为标识符。无论如何,它使代码更难阅读。

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

于 2013-07-31T09:34:59.043 回答
2

The cross-DBMS mechanism (as defined in SQL-92 and other standards) is using double-quoted delimited identifiers. According to this reference it's widely supported.

It's worth nothing that MySQL allows to enable/disable this syntax so you still need to ensure that session settings are correct before issuing any query.

于 2013-07-31T09:59:33.940 回答
1

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

IMO:如果您要连接到 MySQL,请将其设置为 ANSI 模式,并在您使用它时启用它具有的每个 STRICT 选项。那时编写可移植的代码就变得容易多了。

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

于 2013-07-31T17:40:35.857 回答
0

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

如果您仍然必须使用转义 - 使用". 它是标准的(由 ANSI SQL 定义)。

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

于 2013-07-31T09:35:21.447 回答