2016-03-04 38 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,你不應該使用它們作爲列名(雖然使用他們作爲列名將工作我強烈建議你找到不同的名字,以避免將來出現問題)