为什么SQL发行版如此非标准,尽管已经有了针对SQL的ANSI标准?在SQL数据库的工作方式上真的有那么多有意义的差异吗?或者只是我一直在使用的两个数据库: MS-SQL和PostgreSQL?为什么会出现这些差异?
发布于 2008-09-01 04:17:31
这是“隐形锁定”的一种形式。Joel在这里详细介绍了:
公司最终在其实现中将其业务功能与非标准或奇怪的不受支持的功能捆绑在一起,这限制了他们从供应商转移到竞争对手的能力。
另一方面,这是相当短视的,因为任何半个大脑的人都会倾向于抽象出专有部分,或者完全避免锁定,如果它变得太可怕的话。
发布于 2008-09-01 04:15:44
ANSI标准仅指定了一组有限的命令和数据类型。一旦你超越了这些,实现者就只能靠自己了。并且根本没有指定一些非常重要的概念,比如自动递增的列。SQLite只选择第一个非空整数,MySQL需要AUTO INCREMENT,PostgreSQL使用序列,等等。这是乱七八糟的,而且这只是在开源数据库中!尝试让Oracle、Microsoft和IBM共同决定一些棘手的功能。
发布于 2008-09-04 00:37:55
首先,就不兼容性而言,我不认为数据库是浏览器或操作系统。任何经过几个小时培训的人都可以开始对任何SQL数据库进行选择、插入、删除和更新。同时,很难编写在每个浏览器上呈现相同的HTML,或者为多个操作系统编写系统代码。通常,SQL之间的差异与性能或相当深奥的特性有关。主要的例外似乎是日期格式和函数。
其次,数据库开发人员通常会积极添加将其产品与其他产品区分开来的功能。像甲骨文、MS SQL Server和MySQL这样的产品是巨大的生态系统,在实践中很少进行交叉授粉。在我的工作场所,我们使用甲骨文和MySQL,但如果需要或希望的话,我们可能会在大约一天内切换到100%甲骨文。因此,我非常关心甲骨文在每次发布时给我们的闪亮玩具,但我甚至不知道我们使用的是什么版本的MySQL。就我们而言,IBM、微软、PostgreSQL和其他公司可能都不存在了。在数据库世界中,拥有获得并留住客户和用户的功能比兼容性重要得多。(我想,这是“锁定”答案的正面旋转。)
第三,不同的公司有合理的理由以不同的方式实现SQL。例如,Oracle有一个多版本控制系统,允许非常快速且可伸缩的一致读取。其他数据库缺少该功能,但通常可以更快地插入行和回滚事务。这是这些系统的一个根本区别。它不会使一个比另一个更好(至少在一般情况下是这样),只是不同而已。如果数据库引擎顶部的SQL利用其优势并试图最小化其弱点,则不应感到惊讶。事实上,开发人员不这样做是不负责任的。
https://stackoverflow.com/questions/37441
复制相似问题