Одним из самых распространенных типов данных является символьный тип CHAR. С помощью этого типа описываются такие символьные данные, как, например, адреса или имена.
Также используются символьные типы VARCHAR, SET ENUM TEXT и BLOB.
Типы данных CHAR и VARCHAR
Типы данных CHAR и VARCHAR отличаются способами их извлечения и хранения.
Длина поля в столбце типа CHAR является постоянной и может содержать любые значения от 1 до 255 (в некоторых версиях MySQL от 0 до 255). При хранении значения типа CHAR справа дополняются пробелами до указанной длины, которые удаляются при извлечении хранимых значений. Значения типа VARCHAR являются строками переменной длины. Длина значения VARCHAR также от 1 до 255, но при хранении значений этого типа используется лишь необходимое количество символов и 1байт для записи длины. Также хранимые значения не дополняются пробелами.
Если задаваемое значение типа CHAR или VARCHAR будет превосходить максимальную длину столбца, то это значение соответствующим образом будет усечено.
Рассмотрим отличия этих двух типов столбцов на примере значения с разной длиной строки в столбцах VARCHAR(4) и CHAR(4):
Извлеченные значения из столбцов VARCHAR(4) и CHAR(4) в обоих случаях будут одинаковыми, т.к. пробелы в конце строки из столбца CHAR при извлечении удаляются.
Типы данных BLOB и TEXT
Тип данных BLOB является двоичным объектом большого размера, способным содержать переменное количество данных. Существует четыре вида данного типа – LONGBLOB, MEDIUMBLOB, BLOB и TINYBLOB, которые отличаются лишь максимальной длиной хранимых значений.
У типа данных TEXT также четыре вида: LONGTEXT, MEDIUMTEXT, TEXT и TINYTEXT, которые соответствуют вышеупомянутым типам BLOB и имеют те же требования к объему памяти и ту же максимальную длину. Единственным различим между типами TEXT и BLOB является учет регистра при сортировке и сравнении данных для значений BLOB и его отсутствие для значений TEXT.
При превышении максимально допустимых значений в столбце TEXT или BLOB введенное значение будет соответствующим образом усечено.
Тип перечисления ENUM
ENUM является столбцом, принимающим значение из списка допустимых значений, которые явно перечислены в спецификации столбца при создании таблицы.
Таким значением может быть также NULL или пустая строка ("") в определенных случаях:
- вставляется некорректное значение в столбец ENUM (т.е. вставляется строка, не перечисленная в списке допустимых), тогда происходит вставка пустой строки, что указывает на ошибочное значение;
- ENUM определяется как NULL, тогда NULL также является допустимым значением столбца и NULL является значением по умолчанию.
Тип множества SET
SET является строковым типом, принимающим от нуля и больше значений, каждое из которых может быть выбранным из списка допустимых значений, которые определены при создании таблицы. Элементы этого множества разделяют запятыми, следовательно в самих элементах множества не могут содержаться запятые.
Например, столбец, который определен как SET("белый", "синий") NOT NULL может принять следующие значения:
""
"белый"
"синий"
"белый, синий"
Множество SET может содержать до 64 различных элементов.
При вставке в столбец SET некорректного значения эта величина будет проигнорирована.
При сортировке SET-значения выставляются соответственно числовым представлениям, причем NULL-значения выставляются сначала.
Зачастую выполняют SELECT для столбца SET и используют функцию FIND_IN_SET() или оператор LIKE.
Для получения всех возможных значений для столбца SET необходимо вызвать SHOW COLUMNS FROM table_name LIKE set_column_name и сделать анализ SET-определения во втором столбце.