PostgreSQL - эквивалентная версия таблицы, объявленной в MySQL?

0

У меня есть следующая таблица, объявленная в 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
Лучший ответ
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-й атрибут из десятичной (10) в int4. Но я бы предпочел также временную метку (0). Используйте только временную метку без (0), если вам нужна микросекундная точность здесь.

  • 1
    Хммм ... так что utf8_bin и COLLATE просто посторонние, тогда?
  • 0
    Это определено для всего кластера. Никаких специальных сопоставлений нельзя давать для отдельных столбцов, по крайней мере, в 8.4! Позвольте мне взглянуть на документы для более новых версий. Смотрите эту ссылку для получения дополнительной информации о сопоставлении: postgresql.org/docs/8.4/interactive/locale.html
Показать ещё 7 комментариев
1

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

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

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

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

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

  • 0
    +1 Спасибо за добавление подсказки к int (10), я не знал, что MySQL работает так.
  • 0
    @Daniel: Возможно, вы захотите изменить пример кода, чтобы использовать int вместо десятичной.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню