从 MySQL 迁移到 PostgreSQL 需要注意的事
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'
)。
相关文章