MySQL 到 PostgreSQL 表创建转换 - 字符集和排序规则



我想从MySQL迁移到 PostgreSQL.My 查询创建表是这样的。

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

这意味着

该表仅使用拉丁-1 (iso-8859-1) 字符集和拉丁-1 二进制排序顺序。在 PostgreSQL 中,字符集是数据库范围的,没有在表级别设置它的选项。

您可以使用以下命令创建最兼容的数据库:

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

但是,我个人认为MySQL->PostgreSQL端口也值得切换到UTF-8/Unicode。

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

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

因此,如果您确实需要不同的排序规则,则需要这样的东西

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

minmax是SQL中的保留词,您不应该将它们用作列名(尽管将它们用作列名会起作用,我强烈建议您找到不同的名称以避免将来出现问题)

最新更新