PostgreSQL - 在MySQL中声明的表的等效版本?

时间:2011-03-02 17:18:32

标签: mysql postgresql

我在MySQL中声明了以下表:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `ip_address` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `user_agent` varchar(150) COLLATE utf8_bin NOT NULL,
  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
  `user_data` text COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

假设我的数据库已经在使用UTF-8编码,那么postgres中表的等价定义是什么?

2 个答案:

答案 0 :(得分:3)

CREATE TABLE ci_sessions (
  session_id varchar(40) NOT NULL DEFAULT '0',
  ip_address varchar(16) NOT NULL DEFAULT '0',
  user_agent varchar(150) NOT NULL,
  last_activity int4 NOT NULL DEFAULT '0',
  user_data text NOT NULL,
  PRIMARY KEY (session_id)
);

修改器IF NOT EXISTS已将IMHO添加到最新的PostgreSQL版本之一。

编辑:作为未命名的马推荐,我将第4个属性从decimal(10)更改为int4。但我也喜欢这里的时间戳(0)。如果你在这里需要微秒精度,那么只使用没有(0)的时间戳。

答案 1 :(得分:1)

除了丹尼尔已经说过的话:

如果您需要查询IP地址,最好使用本机inet数据类型:
http://www.postgresql.org/docs/current/static/datatype-net-types.html

列名last_activity建议使用时间戳列或类似内容。我强烈建议使用timestamp数据类型。

如果它不同,那么integer与MySQL int(10)的匹配比小数更好。

请注意,MySQL中的int(10)确实定义了值范围,它只是一个显示目的的提示!