SQL兼容性图表(esp数据类型)

时间:2010-11-09 10:33:15

标签: sql database rdbms compatibility

所以...碰巧我正在研究一些代码......最终会在不同的sql服务器上同时使用。

虽然SQL代码因服务器而异,但数据类型和列不是。

因此,我需要知道(至少大多数)sql server类型的通用数据类型。

作为起点,我有以下类型:

byte, char, float, int, text, varchar, blob

请注意拼写非常重要,因为数据类型名称将按原样在查询中结束(例如:虽然支持int和integer,但我需要常用的。)

所以,问题是,有没有人知道比较sql服务器之间兼容性的图表?或者也许有人在该领域做过一些研究?

就偏见而言,我显然偏向于特定的RDBMS,因此不需要RDBMS恰好更好的答案。让我们专注于主题,好吗?

2 个答案:

答案 0 :(得分:1)

我认为你最终会为每种类型的数据库服务器编写特定的,逐个案例的SQL语句。当然,我做到了。

我一直在你的情况下,包括打算编写数据库无关的代码,但从长远来看它只是不起作用。例如,一个数据库不会处理多字节字符串,而另一个数据库会要求它们(即SQL Server CE),这将迫使您在列上使用Varchar与NVarchar。一些数据库将支持多字节字符串,但性能可怕。一个将使用VARCHAR2(Oracle),其他人将使用VARCHAR。一个人将以一种方式处理BLOB,而另一个人将以不同方式处理BLOB。不要让我开始使用日期数据类型。

不是找到适用于所有数据库的SQL语言和数据类型的神奇子集,而是更明智地寻找可以为您隐藏差异的数据访问方法/库(也许某些ORM库可以让您创建DB对象以及访问它们吗?)

就像我说的那样,我一直(并且仍然)处于你必须支持多个数据库的情况,对我来说最好的解决方案是为每个数据库编写最佳代码,而不是试图找到SQL数据类型和代码适用于所有这些(我无法达到令人满意的水平)。

此外,如果为每个数据库创建单独的SQL文本,您将能够从每个数据库中挤出更多性能(即,在创建创建完全不适用的Oracle表时可以指定的与性能相关的参数任何其他数据库中的表格。)

我说,不要在不同的数据库中对抗语法差异,你不会赢。最好是尽可能地忍受并利用这些差异。

答案 1 :(得分:0)

我将研究SQL ANSI标准规范并使用那里指定的数据类型。一本书like this可以帮助你。

他们都有很好的文档,所以我只是阅读他们的数据类型。可能会有你需要的所有信息。我之前找到的only other informationpretty old

希望有所帮助。

编辑:只是另一个想法......你可以使用SQL的策略模式,这样如果它不同就没关系,你可以使用更高级的功能。虽然这样你还有更多工作要做,而且需要做更多工作:/