postgreSQL mysql oracle的区别

fms*_*msf 6 mysql oracle postgresql

我不得不开始构建数据库项目的架构,但我真的不知道引擎之间的差异.

任何人都可以解释这三个引擎的优点和缺点是什么?我们必须选择其中一个,我唯一知道的就是:

  • Mysql和Postgres:
    • 是免费但不如oracle那么好
    • Mysql作为安全问题(这是真的吗?)
  • 甲骨文:
    • 世界上最好的数据库引擎
    • 昂贵

有人可以清除它们之间的其他差异吗?这是一个中/大(我们想约100到200个表)项目,预算很低,你会选择什么?而且预算更高?

Ric*_*d T 12

几年前我不得不写一个翻译引擎; 你喂它一套sql,它转换为当前连接的引擎的方言.我的引擎适用于Postgres(AKA PostgreSql),Ingres,DB2,Informix,Sybase和Oracle - 哦和ANTS.坦率地说,Oracle是我最不喜欢的(更多关于下面的内容)...不幸的是,mySql和SQL Server不在列表中(当时既不被认为是严重的RDBMS - 但时间确实有所改变).

不考虑引擎的质量或性能 - 以及制作和恢复备份的便利性 - 以下是主要区别:

  • 数据类型
  • 范围
  • 残疾人
  • 保留字
  • null语义(见下文)
  • 引用语义(单引号',双引号'或其中之一)
  • 语句完成语义
  • 函数语义
  • 日期处理(包括常量关键字,如'now'和输入/输出函数格式)
  • 是否允许内联评论
  • 最大属性长度
  • 最大属性数
  • 连接语义/安全范例.

如果不对所有转换数据感到烦恼,这里有一个数据类型的示例,lvarchar:

oracle = varchar(%x)sybase = text db2 ="long varchar"informix = lvarchar postgres = varchar(%x)ants = varchar(%x)ingres = varchar(%x,%y)

在我看来,最重要的是空处理; Oracle SILENTLY将空白输入字符串转换为空值.......在某个地方,很久以前,我读过一篇关于"The Seventeen of Null"或其他一些文章的文章.真正的一点是,空值非常有价值,空字符串和空字符串之间的区别是有用而且不平凡!我认为甲骨文在这个问题上犯了一个大错 没有其他人有这种行为(我见过).

我的第二个最不喜欢的是ANTS,因为与其他所有人一样,他们强制执行完全语法的愚蠢规则,绝对没有其他人做,虽然他们可能是唯一提供完全遵守标准的DB公司,但他们也是一个皇家的痛苦写代码的屁股.

我最喜欢的是Postgres; 它在_real_world_情况下非常快,有很大的支持,并且是开源/免费的.