从 MySQL 迁移到 PostgreSQL 需要注意的事
MySQL 是使用非常广泛的开源关系型数据库,它非常易于安装与管理,可以适应大多数存储场景。但是在一些特定领域也有一定的局限性。
这里来描述一下从 MySQL 迁移到 PostgreSQL 数据库需要关注的问题,同样也适用于反向迁移。
MySQL 与 PostgreSQL 的不同点
通常, PostgreSQL 会尽量遵循现有的数据库标准,但是 MySQL 不然,它在这反面有这一些混合的背景。如果你之前是使用的 MySQL 或 Microsoft Access,对于某些更改可能会觉得不习惯(比如不能使用双引号来引用字符串)。
- MySQL 使用非标准的
#作为一行注释的开头, PostgreSQL 则不是。而是使用--(双破折号),这个是符合 ANSI 标准的。并且在两个数据库中都适用。 - MySQL 使用
'或"来引用数值(即WHEREname="John"),这并不符合数据库标准。PostgreSQL 只使用单引号'(即WHEREname='John')。PostgreSQL 中双引号仅用于系统标识符,字段名,表名等(如WHERE"lastname"='Smith')。 - MySQL 使用反引号
`来引用系统标识符,这是非数据库标准的。 - PostgreSQL 在比较字符串时会 区分大小写 。字段 “Smith” 与 “smith” 是不一样的。这与 MySQL 以及其它小型数据库系统(如 Microsoft Access)有很大差异。在 PostgreSQL 中,可以有以下操作:
- 在查询时使用正确的大小写(即,
WHEREname='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')。
相关文章