译者注:作者将PostgreSQL与MariaDB和MySQL进行了比较,展示了PostgreSQL在数据类型处理、数据结构和NULL处理方面的优势,帮助开发者更多地选择数据库那最适合你。以下为译文:多年来,MySQL和PostgreSQL是相互竞争的数据库,但这些数据库面向不同的用户。在我看来,PostgreSQL服务于专业用户,而MySQL在Web开发人员中很受欢迎。不过,在Oracle接手MySQL之后,我觉得MySQL的星光有点褪色了。MariaDB推出以来,个人感觉技术还没有真正完成,但用户仍在使用MySQL/MariaDB,将PostgreSQL与这些技术进行比较很有趣。许多人不同意“PostgreSQL只是更好”这一说法。这种争论通常是不明智的,但PostgreSQL社区可以做得更好。所以应该给出一些想法,为什么使用PostgreSQL比MySQL/MariaDB更合适。本文的目的是提供一些示例,说明为什么您可能更喜欢在技术层面上使用PostgreSQL。但请注意:这篇文章只是说明了一些“最佳”功能,并不是一个完整的列表,但是,这些应该足以让人们做出决定。PostgreSQL与MySQL/MariaDB:数据类型处理您在这里看到的是PostgreSQL错误,因为您尝试放入表中的数据与列的数据类型不匹配,而MySQL/MariaDB将悄悄更改您的数据。是的,MySQL/MariaDB确实发出了警告,但是过了一段时间,表中的数据就不是原来的样子了。为什么这很重要?假设你中了100万彩票,但最后你只中了9999.99,只是因为数据变化太小以至于根本没有人注意到。你会生气吗?我会。在此示例中,PostgreSQL显示的操作是正确的,原因有很多:最可能的原因是列的定义方式。警告与错误不同。存储数据不是“容忍”——它更多的是关于正确性。如果你开枪自杀,没有必要警告你,因为“你现在可能已经死了”——所以最好从一开始就防止这种情况发生。经验教训:PostgreSQL非常重视数据结构。PostgreSQL与MySQL/MariaDB:再次小心现有数据,MySQL/MariaDB会更改您的数据。请注意,插入表中的原始值是1234.5678,但现在我得到9.99。那么你会在未来开始关注细微差别吗?如果是你的银行账户?你关心?如果这个数据库只是为了保持它的运行而不是解决问题——你会继续信任它吗,也许是时候需要找到一个替代品了。如果您的生活取决于数据,您会接受对数据表的无声更改吗?也许我太保守了,所以我不会。PostgreSQL符合我个人对数据库的期望。它会报错告诉我们不能更改数据,因为数据需要保护。如果你想改变表中的数据(以防违反新规则),你必须明确地告诉PostgreSQL你想要什么:在这种情况下,我们告诉PostgreSQL如何处理数据。PostgreSQL并不聪明(也不像MySQL/MariaDB那样失败)它不会尝试做一些有趣的事情——它只是做你想做的,对你的数据有好处。PostgreSQLvsMySQL/MariaDB:NULL处理很重要你还记得“id”列上有一个NOTNULL约束吗?MySQL/MariaDB不关心这个,只是将值设置为0。但是,0和NULL肯定不是一回事。NULL表示“未定义”或“我们不知道的值”。这其实很有道理:如果你不知道口袋里有多少钱,并不意味着你的口袋是空的。如果您不知道自己喝了多少啤酒,也不意味着您血液中的酒精含量为“零”——您实际上可能会从椅子上掉下来。PostgreSQL仔细区分0、空字符串和NULL。这些都是不同的,PostgreSQL将始终遵守您的约束。选择数据库我在PostgreSQL和MySQL/MariaDB之间做出选择是很容易的,就我个人而言,MySQL不是我的选择。然而,这是一个自由的世界,人们可以做出自己的决定,我希望你能做出明智的决定。
