Какие системы баз данных поддерживают тип данных ENUM, а какие нет?

Это работает в Python 2.x.

Для Python 3 смотрите здесь:

http://docs.python.org/py3k/library/urllib. request.html? highlight = urllib # urllib.request.urlopen

import urllib.request
with urllib.request.urlopen("http://www.python.org") as url:
    s = url.read()
#I'm guessing this would output the html source code?
print(s)

10
задан Community 23 May 2017 в 12:25
поделиться

5 ответов

Я знаю, что MySQL действительно поддерживает ПЕРЕЧИСЛЕНИЕ:

  • тип данных реализован как целочисленное значение со связанными строками
  • у Вас может быть максимум 65,535 элементов для единственного перечисления
  • каждая строка имеет числовой эквивалент, рассчитывая от 1, в порядке определения
  • численное значение поля доступно через"SELECT enum_col+0"
  • в нестрогом режиме SQL присваиваясь не в списке значения не обязательно приводят к ошибке, а скорее специальное ошибочное значение присвоено вместо этого, имея численное значение 0
  • сортировка происходит в числовом порядке (например, порядке определения), не в алфавитном порядке строковых эквивалентов
  • присвоение или работает через строку значения или индекс
  • это: ENUM('0','1','2') должен избежаться, потому что '0' имел бы целочисленное значение 1
7
ответ дан 3 December 2019 в 04:15
поделиться

Oracle не поддерживает ПЕРЕЧИСЛЕНИЕ вообще.

4
ответ дан 3 December 2019 в 04:15
поделиться

PostgreSQL поддерживает ПЕРЕЧИСЛЕНИЕ от 8,3 вперед. Для более старых версий можно использовать:

Можно моделировать ПЕРЕЧИСЛЕНИЕ путем выполнения чего-то вроде этого:

CREATE TABLE persons (
  person_id int not null primary key,
  favourite_colour varchar(255) NOT NULL,
  CHECK (favourite_colour IN ('red', 'blue', 'yellow', 'purple'))
);

Вы могли также иметь:

CREATE TABLE colours (
  colour_id int not null primary key,
  colour varchar(255) not null
)
CREATE TABLE persons (
  person_id int not null primary key,
  favourite_colour_id integer NOT NULL references colours(colour_id),
);

который сделал бы, чтобы Вы добавили соединение, когда Вы узнаете любимый цвет, но имеет преимущество, что можно добавить цвета просто путем добавления записи в таблицу цветов, и не, что Вы не должны были бы изменять схему каждый раз. Вы также могли добавить атрибут к цвету, как HTML-код или значения RVB.

Вы также могли создать свой собственный тип, который делает перечисление, но я не думаю, что это было бы больше быстрее, чем varchar и CHECK.

7
ответ дан 3 December 2019 в 04:15
поделиться

AFAIK, ни IBM DB2, ни IBM Informix Динамические типы ПЕРЕЧИСЛЕНИЯ поддержки Сервера.

4
ответ дан 3 December 2019 в 04:15
поделиться

В отличие от того, какая сказанная циновка, PostgreSQL действительно поддерживает ПЕРЕЧИСЛЕНИЕ (начиная с версии 8.3, последней):

essais=> CREATE TYPE rcount AS ENUM (
essais(>   'one',
essais(>   'two',
essais(>   'three'
essais(> );
CREATE TYPE
essais=> 
essais=> CREATE TABLE dummy (id SERIAL, num rcount);
NOTICE:  CREATE TABLE will create implicit sequence "dummy_id_seq" for serial column "dummy.id"
CREATE TABLE
essais=> INSERT INTO dummy (num) VALUES ('one');
INSERT 0 1
essais=> INSERT INTO dummy (num) VALUES ('three');
INSERT 0 1
essais=> INSERT INTO dummy (num) VALUES ('four');
ERROR:  invalid input value for enum rcount: "four"
essais=> 
essais=> SELECT * FROM dummy WHERE num='three';
 id |  num  
----+-------
  2 | three
  4 | three

Существуют функции, которые работают конкретно над перечислениями.

Индексация хорошо работает на перечислимых типах.

Согласно руководству, реализация следующие:

Перечисление значений занимает четыре байта на диске. Длина текстовой маркировки перечисления значений ограничена установкой NAMEDATALEN, скомпилированной в PostgreSQL; в стандартных сборках это означает самое большее 63 байта.

Перечислимые маркировки чувствительны к регистру, так же 'счастливы', не то же как 'СЧАСТЛИВЫЙ'. Пробелы в маркировках являются значительными, также.

2
ответ дан 3 December 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: