文章目錄
前言
PostgreSQL 8.1 轟動發布,我也打算將原來使用 SQL Server 的一些應用遷移到 PostgreSQL 上,首先需要遷移的是表,那麼這就必須要先搞清楚這兩個資料庫中的資料類型的映射關係。查了下 PostgreSQL 文檔特製作如下對應表格,以饗各位。
SQL Server 2000 |
Microsoft Jet-SQL 4.0 |
PostgreSQL 8.x |
bigint |
DECIMAL |
bigint |
binary(n) |
BINARY(n) |
bytea(n) |
bit |
BIT |
boolean, bool |
char(n) |
CHAR(n) |
char(n) |
datetime |
DATETIME |
timestamp(date, time) |
decimal |
DECIMAL |
decimal |
float |
FLOAT |
real, float4 |
image |
IMAGE |
bytea |
int |
INT |
integer, int, int4 |
money |
CURRENCY |
decimal |
nchar(n) |
NCHAR(n) |
char(n) |
ntext |
LONGTEXT |
text |
numeric |
DECIMAL |
numeric |
nvarchar(n) |
NCHAR VARYING(n) |
varchar(n) |
real |
REAL |
real |
smalldatetime |
DATETIME |
timestamp(date, time) |
smallint |
SMALLINT |
smallint, int2 |
smallmoney |
CURRENCY |
decimal |
text |
LONGTEXT |
text |
timestamp |
BINARY |
無 |
tinyint |
BYTE |
無 |
uniqueidentifier |
GUID |
無 |
varbinary(n) |
VARBINARY(n) |
bytea(n) |
varchar(n) |
VARCHAR(n) |
varchar(n) |
注意:PostgreSQL 中的 money(貨幣)資料類型現在已經廢棄,用 numeric 或 decimal 以及和 to_char 函數一起使用就可以取代它。
* SQL Server 中的 datetime、smalldatetime 資料類型均包含日期和時間部分,區別只在於精度不同。其對應於 PostgreSQL 中的 timestamp 類型(包含日期和時間)。在 PostgreSQL 中如果只需要日期部分,則可以使用 date 類型,而只需要時間部分則可使用 time 類型。
* PostgreSQL 中的 bytea(n) 始終為變長的二進位位元組數組,相當於 SQL Server 中的 varbinary(n),如果沒有指定 bytea 的最大位元組數則表示為不限長度的變長位元組數組,相當於 SQL Server 中的 image 資料類型。
* PostgreSQL 中的字元類型沒有像 SQL Server 中有對應的本地文本類型和國際化文本類型的兩種文本資料類型的區別,儲存在 PostgreSQL 中的文本類型的資料是否國際化還是本地化取決於資料庫的文本編碼設定。
為了保證資料存放區的國際化,建議將資料庫的文本編碼方式設定為 UTF-8 或者 Unicode,以確儲存儲的文本可被不同地區和文化下的使用者查看和儲存。
* 對於 GUID 類型的資料,在 PostgreSQL 中可以使用 bytea(16) 來儲存,可用位元組數組函數來對其進行比較等操作。