MySQL 到 PostgreSQL table 创建转换 - 字符集和排序规则
MySQL to PostgreSQL table create conversion - charset and collation
我想从 MySQL 迁移到 PostgreSQL.My 查询创建 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
部分感到困惑。我怎样才能转换这部分?
字符集是在您创建数据库时定义的,您不能在 Postgres 中根据 table 覆盖它。
非标准排序规则只能在 Postgres 的列级别定义,不能在 table 级别定义。我认为(!)相当于 MySQL 中的 latin1_bin
将是 Postgres 中的 "C"
排序规则。
所以如果你确实需要不同的排序规则,你需要这样的东西
RegEx varchar(300) default NULL collate "C",
ErrStr varchar(300) default NULL collate "C",
min
和 max
是 SQL 中的保留字,您不应该将它们用作列名(尽管将它们用作列名会起作用 I强烈建议您找到不同的名称以避免将来出现问题)
这意味着 table 仅使用 latin-1 (iso-8859-1) 字符集和 latin-1 二进制排序顺序。在 PostgreSQL 中,字符集是 数据库范围 ,没有选项可以在 table 级别设置它。
您可以创建 mostly compatible database with:
CREATE DATABASE databasenamegoeshere WITH ENCODING 'LATIN1' LC_COLLATE='C'
LC_CTYPE='C' TEMPLATE=template0;
但是,我个人认为 MySQL->PostgreSQL 端口也值得切换到 UTF-8/Unicode。
我想从 MySQL 迁移到 PostgreSQL.My 查询创建 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
部分感到困惑。我怎样才能转换这部分?
字符集是在您创建数据库时定义的,您不能在 Postgres 中根据 table 覆盖它。
非标准排序规则只能在 Postgres 的列级别定义,不能在 table 级别定义。我认为(!)相当于 MySQL 中的 latin1_bin
将是 Postgres 中的 "C"
排序规则。
所以如果你确实需要不同的排序规则,你需要这样的东西
RegEx varchar(300) default NULL collate "C",
ErrStr varchar(300) default NULL collate "C",
min
和 max
是 SQL 中的保留字,您不应该将它们用作列名(尽管将它们用作列名会起作用 I强烈建议您找到不同的名称以避免将来出现问题)
这意味着 table 仅使用 latin-1 (iso-8859-1) 字符集和 latin-1 二进制排序顺序。在 PostgreSQL 中,字符集是 数据库范围 ,没有选项可以在 table 级别设置它。
您可以创建 mostly compatible database with:
CREATE DATABASE databasenamegoeshere WITH ENCODING 'LATIN1' LC_COLLATE='C'
LC_CTYPE='C' TEMPLATE=template0;
但是,我个人认为 MySQL->PostgreSQL 端口也值得切换到 UTF-8/Unicode。