??? 直接把 MySQL 代码粘过去,生产环境竟然原地爆炸了!
别笑,根据 Stack Overflow 2024 年度的开发者调研,PostgreSQL 已经以 49% 的使用率超越 MySQL 登顶全球第一,但据不完全统计,超过 60% 的新玩家在迁移第一天就被报错信息按在地上摩擦。
连 DB-Engines 的资深分析师都忍不住吐槽:“从 MySQL 到 PG,这哪里是换数据库,分明是换脑子。”
今天咱们不聊那些虚头巴脑的底层架构,就聊聊那些让你深夜加班的“语法坑”。准备好,这波是干货。
引号引发的血案
咱们先说个最反直觉的。在 MySQL 的世界里,单引号、双引号就像是一对好基友,混着用也没事。
但在 PG 的地盘?不好意思,这里讲究“长幼有序”。
SQL 标准规定:单引号用于字符串字面量,双引号用于数据库标识符(表名、列名)。
什么概念?
如果你在 PG 里写SELECT "status" FROM users WHERE "status" = "active",PG 会直接给你甩一个报错:column "active" does not exist。
因为它认为双引号里的"active"是一个列名,而不是字符串!
简单来说:
- MySQL:
'active'和"active"都能代表字符串。 - PG:只有
'active'