Кроме основных типов, которые обсуждались в предыдущих разделах, MySQL также расширяет свои спецификации на два сложных типа: ENUM и SET. Несмотря на то, что технически это строковые типы, они попадают в другую категорию, т.к. их значения выбираются из предварительно заданных строк. Тип ENUM (перечисление) разрешает выбор только одного значения из набора допустимых значений, тип SET допускает выборку любого произвольного количества значений из допустимого набора значений.
Тип ENUM
Этот тип данных обычно используется для задания взаимоисключающих значений, в которых допускается выбор только одного значения из набора. Самым характерным примером таких данных могут служить данные о поле человека, который может быть только мужским или только женским. Рассмотрим следующий пример.
Нетрудно заметить, что поля, объявленные с типом ENUM, могут содержать только те значения, которые были перечислены во множестве разрешенных значений или значений NULL, любая попытка использовать другие значения будет приводить к вставке MySQL пустой строки. При несовпадении регистра добавляемого значения, регистр вставленного значения будет автоматически изменен на регистр значения, с которым данное поле было объявлено. И это хорошо видно в последнем примере.
Интересно заметить, несмотря на то, что члены ENUM могут объявляться только как строки, внутренне они могут сохраняться как числа и индексироваться, начиная с 1. Тип ENUM может содержать максимум 65536 элементов при одном, резервируемом для хранения ошибок, этот элемент имеет индекс 0 (пустая строка).
Так как доступ к значениям типа ENUM может осуществляться по строке или по индексу, следующие два примера являются абсолютно идентичными.
MySQL рассматривает в качестве допустимых только те значения, которые присутствуют в объявлении типа ENUM; любая попытка вставить значения, отличные от этих, закончится неудачей и отображением значения ошибки. Это значит, что появляется возможность легко обнаружить различные ошибочные записи при поиске строк, содержащих пустую строку или соответствующее ей числовое значение 0. Это можно увидеть, немного изменив предыдущий пример, переделав его для подсчета количества строк с ошибочными значениями. Следующие два примера являются идентичными.
Тип SET
Подобным, хотя и не полностью аналогичным, является тип SET, позволяющий производить выборку любого количества значений из предопределенного набора строковых значений. В отличие от полей, объявленных с использованием типа ENUM, поля объявленные с типом SET, могут содержать ноль, один или более одного элементов допустимых значений. Это делает тип SET хорошим вариантом для выборки со многими возможными вариантами. Рассмотрим следующий пример.
Как и в случае с типом ENUM, любая попытка использовать значение, которое не входит в предопределенный набор, завершится добавлением пустой строки.
Тип SET допускает задание не более 64 элементов. Значения хранятся как последовательность битов, а бит, соответствующий выбранному элементу, будет иметь значение 1. Это битовое представление является простым и эффективным способом создания наборов элементов, он также позволяет избегать повторений, т.к. повторение одного и того же элемента в одном значении типа SET невозможно. Рассмотрим следующий пример.
Этот тип данных также позволяет определять записи, имеющие ошибочные данные, - все, что нужно для этого, это подсчитать количество строк, которые имеют пустые строки или двоичное значение 0. Это хорошо видно из следующих двух примеров, которые являются идентичными.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Сложные типы
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Типы DATETIME и TIMESTAMP | Все о MySQL. Выбор типа данных |