MySQL到PostgreSQL表创建转换 - charset和collat​​ion

时间:2016-03-04 11:18:50

标签: postgresql ddl

我想从MySQL迁移到PostgreSQL。我对create table的查询是这样的。

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部分感到困惑。我该如何转换这部分?

2 个答案:

答案 0 :(得分:3)

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

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

因此,如果你确实需要不同的整理,你需要这样的东西

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

minmax是SQL中保留的wordd,你不应该将它们用作列名(尽管使用它们作为列名可行)我强烈建议你找到不同的名称以避免未来的问题)

答案 1 :(得分: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。