日期:2014-05-16  浏览次数:20781 次

怎样将以下mssql语句转换成postgresql语句呢?
CREATE   TABLE   [dbo].[Client]   (
[Name]   [char]   (15)   COLLATE   Chinese_PRC_CI_AS   NULL   ,
[Phone]   [char]   (12)   COLLATE   Chinese_PRC_CI_AS   NULL  
)   ON   [PRIMARY]
GO

请问各位大侠,如何将以上mssql语句转换为postgresql语句呢?
小女子有3点不明白怎么转换,网上查了好多资料也没结果,望有高人指点啊,
感激不尽!
1、字符串排列顺序的“COLLATE   Chinese_PRC_CI_AS   ”在postgresql中应该怎么表示呢?
2、文件组“ON   [PRIMARY]”如何转换?
3、还有GO?

------解决方案--------------------
1、一样
2、去掉就行,这个是MSSQL 默认的。不写也罢。
3、Go变为;
------解决方案--------------------
Chinese_PRC_CI_AS不是MYsql可以辨认的字符集校对规则。
换成 gb2312_chinese_ci 或者 gbk_chinese_ci 看看。
------解决方案--------------------
从你提供的原始的脚本来看:
CREATE TABLE [dbo].[Client] (
[Name] [char] (15) COLLATE Chinese_PRC_CI_AS NULL ,
[Phone] [char] (12) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
这段脚本应该是从企业管理器中倒出来的,其中很多本可以不用显示的缺省的值也显示出来,这些值在实际创建中是可以不需要的,你可以在MSSQL中这样创建表:
CREATE TABLE [dbo].[Client] (
[Name] [char] (15) NULL ,
[Phone] [char] (12) NULL
)
GO
这样,换成postgresql可以这样写:
CREATE TABLE Client (
[Name] char(15) NULL ,
[Phone] char(12) NULL
);

几个解释和说明:
1、 postgresql目前好像不支持独立字段的排列顺序,好像只和库设置的字符集有关。
2、在MSSQL中文件组“ON [PRIMARY]”是指表的存放位置,“ON [PRIMARY]”是缺省位置。postgresql也有缺省位置pg_default。如果没有必要可以不用加这个内容。如果你们需要多个表空间之类的,可以在建表语句最后加上 ON tablespace_name, tablespace_name是你想把这个表放在那个表空间的表空间名字。
3、在MSSQL中GO表示一个SQL语句的结束,在postgresql中用 "; "来表示。
4、从表设计上讲Name和Phone用变长字符串更好一点,在MSSQL和postgresql都用varchar数据类型。