如何查找列名是否是跨各种数据库的保留关键字

时间:2011-08-14 16:45:41

标签: mysql oracle postgresql h2

我们有一个遗留模式文件,其中包含以下列名,如果我们将应用程序移植到h2,mysql,postgres或oracle,我们想了解它们是否会导致问题。

例如,我如何知道在下面列出的数据库中使用它是否正常。是否有任何好的工具可以对此进行初步检查?

key
when
size
type
count
from
with

4 个答案:

答案 0 :(得分:11)

答案 1 :(得分:1)

我不知道任何表,但如果你有表名和列名列表,那么过滤它们并不困难。

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

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

其他数据库也可能包含此类元数据。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

我建议根据您提供的列表,它在大多数SQL系统中都不起作用。但是你可以始终一致地双引号标识符以避开关键字问题。 (但是,您需要在ANSI模式下运行MySQL。)