这里来描述一下从 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')。