从 MySQL 迁移到 PostgreSQL 需要注意的事

2020-06-17 00:00:00 数据库 字符串 标准 区分 大小写

MySQL 是使用非常广泛的开源关系型数据库,它非常易于安装与管理,可以适应大多数存储场景。但是在一些特定领域也有一定的局限性。

这里来描述一下从 MySQL 迁移到 PostgreSQL 数据库需要关注的问题,同样也适用于反向迁移。

MySQL 与 PostgreSQL 的不同点

通常, PostgreSQL 会尽量遵循现有的数据库标准,但是 MySQL 不然,它在这反面有这一些混合的背景。如果你之前是使用的 MySQL 或 Microsoft Access,对于某些更改可能会觉得不习惯(比如不能使用双引号来引用字符串)。

  • MySQL 使用非标准的 # 作为一行注释的开头, PostgreSQL 则不是。而是使用 -- (双破折号),这个是符合 ANSI 标准的。并且在两个数据库中都适用。
  • MySQL 使用 '" 来引用数值(即 WHERE name = "John"),这并不符合数据库标准。PostgreSQL 只使用单引号 '(即 WHERE name = 'John')。PostgreSQL 中双引号仅用于系统标识符,字段名,表名等(如 WHERE "last name" = 'Smith')。
  • MySQL 使用反引号 ` 来引用系统标识符,这是非数据库标准的。
  • PostgreSQL 在比较字符串时会 区分大小写 。字段 “Smith” 与 “smith” 是不一样的。这与 MySQL 以及其它小型数据库系统(如 Microsoft Access)有很大差异。在 PostgreSQL 中,可以有以下操作:
    • 在查询时使用正确的大小写(即,WHERE name = 'Smith')。
    • 使用转换函数,如搜索查询时使用lower()(即,WHERElower(Iname)='smith')。
    • 使用不区分大小写的运算符,如 LIKE~*
  • PostgreSQL 中的数据库、表、字段和列的名称都是不区分大小写的,如果需要区分大小写可以用双引号 " 括起来。MySQL 中,表名可以区分大小写,也可以不区分大小写,这个取决于使用的操作系统。
  • MySQL 中支持 C 语言逻辑运算符(如 'foo' || 'bar' 表示 'foo' OR 'bar''foo' && 'bar' 表示 'foo' AND 'bar')。这虽然能对 C 语言开发者提供些帮助,但是却是以违反数据库标准为代价。PostgreSQL 遵循数据库标准,使用 || 表示字符串连接('foo' || 'bar' = 'foobar')。

相关文章