Имеет ли SQL Server 2005 эквивалентный тип данных ENUM MySql? - PullRequest
27 голосов
/ 04 ноября 2008

Я работаю над проектом и хочу сохранить некоторую легко перечисляемую информацию в таблице. Тип данных перечисления MySql делает именно то, что я хочу: http://dev.mysql.com/doc/refman/5.0/en/enum.html. Есть ли эквивалент в SQL Server 2005?

Я знаю, что могу хранить возможные значения в таблице типов с ключом, но я бы предпочел не ссылаться на нее для описания. Наши стандарты баз данных не позволяют нам ссылаться на нецелочисленные поля или поля уникальных идентификаторов, поэтому хранение возможных ключей в виде символов также невозможно

Ответы [ 2 ]

24 голосов
/ 04 ноября 2008

Это у вас работает?

С http://blechie.com/wtilton/archive/2007/08/24/303.aspx

Создать таблицу ...

MySQL:

ColumnName ENUM('upload', 'open', 'close', 'delete', 'edit', 'add')
   DEFAULT 'open'

SQL Server:

ColumnName varchar(10) 
   CHECK(ColumnName IN ('upload', 'open', 'close', 'delete', 'edit', 'add')) 
   DEFAULT 'open'
17 голосов
/ 04 ноября 2008

Одной из характеристик типа данных MySQL ENUM является то, что он хранит только числовой индекс в списке значений, а не саму строку в каждой строке. Так что обычно он более эффективен при хранении. Кроме того, поведение по умолчанию при сортировке по столбцу ENUM - сортировка по числовому индексу, следовательно, по порядку элементов в ENUM.

Nikki9696 предлагает использовать столбец VARCHAR с ограничением CHECK. Это удовлетворяет ограничению значений определенным кратким списком разрешенных значений, но не моделирует эффективность хранения или особый порядок сортировки.

Один из способов получить оба поведения - объявить столбец как целочисленный внешний ключ в таблице поиска, в которой вы сохраняете каждую разрешенную строку.

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