PostgreSQL - эквивалентная версия таблицы, объявленной в MySQL? - PullRequest
0 голосов
/ 02 марта 2011

У меня есть следующая таблица, объявленная в 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;

Каким будет эквивалентное определение таблицы в postgres, если моя база данных уже использует кодировку UTF-8?

Ответы [ 2 ]

3 голосов
/ 02 марта 2011
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 только что был добавлен в одну из новейших версий PostgreSQL.

EDIT : как рекомендовано безымянной лошадью, я изменил 4-й атрибут с десятичного(10) до int4.Но я бы также предпочел метку времени (0).Используйте только отметку времени без (0), если вам нужна точность в микросекундах.

1 голос
/ 02 марта 2011

В дополнение к тому, что Дэниел уже сказал:

Если вам нужно запросить IP-адрес, для этого может быть лучше использовать собственный тип данных inet:http://www.postgresql.org/docs/current/static/datatype-net-types.html

Имя столбца last_activity предлагает столбец отметки времени или что-то подобное.Я настоятельно рекомендую использовать для этого тип данных timestamp.

Если это что-то другое, то integer лучше соответствует int(10) MySQL, чем десятичное число.

Обратите внимание, что int (10) в MySQL не определяет диапазон значений, это просто подсказка для отображения целей!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...