簡體   English   中英

MySQL到PostgreSQL表創建轉換-字符集和排序規則

[英]MySQL to PostgreSQL table create conversion - charset and collation

我想從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部分感到困惑。 如何轉換這部分?

字符集是在創建數據庫時定義的,您無法在Postgres中覆蓋每個表的字符集。

非標准排序規則只能在Postgres中的列級別上定義,而不能在表級別上定義。 我認為(!)在MySQL中相當於latin1_bin就是Postgres中的"C"排序規則。

因此,如果您確實需要其他排序規則,則需要這樣的內容

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

minmax在SQL中是保留字,您不應該將它們用作列名(盡管將它們用作列名會很有效,我強烈建議您使用其他名稱,以避免將來出現問題)

那將意味着該僅使用latin-1(iso-8859-1)字符集和latin-1二進制排序順序。 在PostgreSQL中,字符集是數據庫范圍的 ,沒有選項可以在表級別進行設置。

您可以使用以下命令創建一個最兼容的數據庫

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

但是,我個人認為MySQL-> PostgreSQL端口也值得切換到UTF-8 / Unicode。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM