问:为什么我们会有多个数据库?
答:因为它们都很糟糕。
那么,你最喜欢的数据库的哪个“功能”让你觉得(甚至说出)“WTF???”
例如,Oracle不支持原生类型TIME。相反,TIME被合并到DATE中,因此您必须在查询中进行分割和切分。
或者是“优化提示”,Oracle可以自由地忽略它们。由于它们被实现为SQL查询中的注释,所以当您在它们中打字错误时,您不会注意到。或者当Oracle忽略它们时。
问:为什么我们会有多个数据库?
答:因为它们都很糟糕。
那么,你最喜欢的数据库的哪个“功能”让你觉得(甚至说出)“WTF???”
例如,Oracle不支持原生类型TIME。相反,TIME被合并到DATE中,因此您必须在查询中进行分割和切分。
或者是“优化提示”,Oracle可以自由地忽略它们。由于它们被实现为SQL查询中的注释,所以当您在它们中打字错误时,您不会注意到。或者当Oracle忽略它们时。
Oracle把空的VARCHAR作为NULL处理,这是我关注的重点。
MySQL允许在数据库中存储无效日期,例如00-00-0000。而且还有人正在使用它。当您尝试在具有适当本地DateTime类型(例如C#)的语言中使用该数据时,可能会遇到无限的困扰。
你在最喜欢的数据库中发现了什么怪癖?
SQL。
但这个答案有点不诚实,因为当我在“我最喜欢的数据库”中发现SQL时,我还不知道它是一个怪癖,或者为什么会出现。
"其实并不喜欢 Sybase 没有 FULL OUTER JOIN 这个事实。你必须使用 LEFT/RIGHT/UNION 来获得你想要的结果。真烦。
Oracle对于“transaction isolation level == SERIALIZABLE”的解释是,如果出现错误就会抛出异常。不使用锁定来防止其他查询影响您感兴趣的相同行,而是在发生此情况时简单地抛出异常。因此,您可以重新启动(可能很复杂和长)的事务。在繁忙的系统中,因为其他人也在使用数据库,它可能永远无法完成。太棒了。