2016-03-04 161 views
1

我想从MySQL迁移到PostgreSQL.My查询创建表是这样的。MySQL到PostgreSQL表创建转换 - 字符集和整理

CREATE TABLE IF NOT EXISTS conftype 
(
    CType char(1) NOT NULL, 
    RegEx varchar(300) default NULL, 
    ErrStr varchar(300) default NULL, 
    Min integer default NULL, 
    Max integer default NULL, 
    PRIMARY KEY (CType) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin; 

该查询的转换形式是什么。我很困惑与DEFAULT CHARSET=latin1 COLLATE=latin1_bin部分。我怎样才能转换这部分?

回答

3

这意味着只使用latin-1(iso-8859-1)字符集和latin-1二进制排序顺序。在PostgreSQL中,字符集是数据库范围内的,因此无法在表级别上进行设置。

您可以创建一个mostly compatible database with

CREATE DATABASE databasenamegoeshere WITH ENCODING 'LATIN1' LC_COLLATE='C' 
    LC_CTYPE='C' TEMPLATE=template0; 

不过,我个人会考虑MySQL-> PostgreSQL的端口也是值得切换到UTF-8/Unicode的。

3

字符集是在创建数据库时定义的,不能覆盖Postgres中的每个表。

非标准排序规则只能在Postgres的列级定义,而不能在表级别定义。我认为(!)相当于MySQL中的latin1_bin将是Postgres中的"C"排序规则。

所以,如果你需要一个不同的排序规则,你需要像这样

RegEx varchar(300) default NULL collate "C", 
ErrStr varchar(300) default NULL collate "C", 

minmax被保留在SQL wordds,你不应该使用它们作为列名(虽然使用他们作为列名将工作我强烈建议你找到不同的名字,以避免将来出现问题)