【问题标题】:How to find if a column name is a reserved keyword across various databases如何查找列名是否是跨各种数据库的保留关键字
【发布时间】:2011-10-26 20:33:12
【问题描述】:

我们有一个具有以下列名称的旧架构文件,想了解如果我们将应用程序移植到 h2、mysql、postgres 或 oracle,它们中的任何一个是否会导致问题。

例如,我怎么知道在下面列出的数据库中是否可以使用它。有什么好的工具可以对此做初步检查吗?

key
when
size
type
count
from
with

【问题讨论】:

标签: mysql oracle postgresql h2


【解决方案1】:

【讨论】:

  • 我实际上是在寻找在线检查器,感谢您的链接
  • MySQL 链接已损坏。如果你修复它,我会删除这条评论。
【解决方案2】:

我不知道有任何表,但如果你有表名和列名的列表,过滤它们应该不难。

Oracle 在其数据字典中有一个V$RESERVED_WORDS 视图。

您所要做的就是将您的表/列名称与此匹配:只需将它们添加到临时表并加入 tis 视图。如果您有查询结果,那么您有一个保留字。

其他数据库也可能有这样的元数据。

【讨论】:

    【解决方案3】:

    DatabaseMetaData.getSQLKeywords() 应该返回此数据库中以逗号分隔的保留字列表。但是,此列表不包含 ANSI SQL 关键字,例如 FROM。但是,我不完全确定这是否真的包含所有数据库中的所有关键字。

    对于 H2,关键字列表记录在 Keywords / Reserved Words 下。

    【讨论】:

      【解决方案4】:

      找出答案的最简单方法是尝试一下。您提到的所有数据库管理系统都是开源的或免费下载和试用。通过它们运行带有CREATE TABLE 语句的SQL 脚本,看看会发生什么。

      在不参考实际 SQL 脚本的情况下提出此问题的问题在于,某些解析器具有各种类别的保留字。一些关键词可能被列为关键词,但可能仍然可以用作列名,但稍后可能不会在棘手的SELECT 语句中使用。所以最好尝试一下。

      我建议根据您提供的列表,它不适用于大多数 SQL 系统。但是您始终可以始终对标识符进行双引号以避免关键字问题。 (不过,您需要在 ANSI 模式下运行 MySQL。)

      【讨论】:

        猜你喜欢
        • 2017-11-22
        • 2013-11-14
        • 1970-01-01
        • 1970-01-01
        • 2021-09-05
        • 2019-04-15
        • 2023-03-12
        • 2012-01-24
        • 2021-12-11
        相关资源
        最近更新 更多