我们有一个遗留模式文件,其中包含以下列名称,如果我们将应用程序移植到h2,mysql,postgres或oracle,我们想了解它们是否会导致问题。
例如,我如何知道在下面列出的数据库中使用它是否正常。有没有什么好的工具可以对此进行初步检查?
key
when
size
type
count
from
with
应该很容易获得保留字列表并构建保留字表。以下是一些保留字列表:
这是一个在线检查器:http://www.petefreitag.com/tools/sql_reserved_words_checker/?word=on
我不知道任何表,但如果您有表名和列名列表,则应该不难过滤它们。
Oracle在其数据字典中有一个V$RESERVED_WORDS
视图。
您所要做的就是将您的表/列名称与此匹配:只需将它们添加到临时表并使用tis视图连接即可。如果您有查询结果,那么您有一个保留字。
其他数据库也可以具有这样的元数据。
DatabaseMetaData.getSQLKeywords()
应该返回此数据库中以逗号分隔的保留字列表。但是,此列表不包含ANSI SQL关键字,例如FROM
。我不完全确定这是否真的包含所有数据库中的所有关键字。
对于H2,关键字列表记录在Keywords / Reserved Words下。
找出答案的最简单方法是尝试。您提到的所有数据库管理系统都是开源的或免费下载和试用。通过它们运行带有CREATE TABLE
语句的SQL脚本,看看会发生什么。
在不参考实际SQL脚本的情况下询问此问题的一个问题是,某些解析器具有各种类型的保留字。一些关键词可能被列为关键词,但可能仍然可以用作列名,但可能不会在后来的棘手的SELECT
语句中使用。因此,最好先尝试一下。
我建议根据你给出的列表,它在大多数SQL系统中都不起作用。但是你可以始终一致地双引号标识符以避开关键字问题。 (但是,您需要在ANSI模式下运行MySQL。)