你最喜欢的数据库有哪些瑕疵?

3

问:为什么我们会有多个数据库?
答:因为它们都很糟糕。

那么,你最喜欢的数据库的哪个“功能”让你觉得(甚至说出)“WTF???”

例如,Oracle不支持原生类型TIME。相反,TIME被合并到DATE中,因此您必须在查询中进行分割和切分。

或者是“优化提示”,Oracle可以自由地忽略它们。由于它们被实现为SQL查询中的注释,所以当您在它们中打字错误时,您不会注意到。或者当Oracle忽略它们时。

6个回答

3

Oracle把空的VARCHAR作为NULL处理,这是我关注的重点。


是的,但相反也很糟糕。通常并不清楚(至少对我来说)一个值应该是 null 还是空字符串,而且祝你好运向最终用户解释“不,有一个值,只是它是空的”。这是一个无法取胜的情况。 - erikkallen
1
“空不是null”的情况可以由软件处理,“空是null”的情况则不能。 - kdgregory

3

MySQL允许在数据库中存储无效日期,例如00-00-0000。而且还有人正在使用它。当您尝试在具有适当本地DateTime类型(例如C#)的语言中使用该数据时,可能会遇到无限的困扰。


1
"

你在最喜欢的数据库中发现了什么怪癖?

SQL。

但这个答案有点不诚实,因为当我在“我最喜欢的数据库”中发现SQL时,我还不知道它是一个怪癖,或者为什么会出现。

"

0

其实并不喜欢 Sybase 没有 FULL OUTER JOIN 这个事实。你必须使用 LEFT/RIGHT/UNION 来获得你想要的结果。真烦。


0

Oracle对于“transaction isolation level == SERIALIZABLE”的解释是,如果出现错误就会抛出异常。不使用锁定来防止其他查询影响您感兴趣的相同行,而是在发生此情况时简单地抛出异常。因此,您可以重新启动(可能很复杂和长)的事务。在繁忙的系统中,因为其他人也在使用数据库,它可能永远无法完成。太棒了。


那不完全正确。它尽可能地做到了,而不是强制只有一个用户同时修改数据库。所有数据库管理系统都是如此。 - erikkallen
我认为SERIALIZABLE背后的理念是让用户至少感觉自己是唯一修改数据库的人。除了死锁之外,不应该有其他事情让他烦恼。 - Vilx-

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接