Главная
»
Информационные системы
»
Управление данными
»
ТИПЫ ДАННЫХ, ПОДДЕРЖИВАЕМЫЕ СУБД MYSQL (СИМВОЛЬНЫЕ)
ТИПЫ ДАННЫХ, ПОДДЕРЖИВАЕМЫЕ СУБД MYSQL (СИМВОЛЬНЫЕ)
Символьные типы данных
Существуют следующие символьные типы данных: CHAR
, VARCHAR
, BLOB
, TEXT
, ENUM
и SET
.
Типы данных CHAR
и VARCHAR
очень схожи между собой, но различаются по способам их хранения и извлечения.
В столбце типа CHAR
длина поля постоянна и задается при создании таблицы. Эта длина может принимать любое значение между 1
и 255
(что же касается версии MySQL 3.23, то в ней длина столбца CHAR
может быть от 0
до 255
). Величины типа CHAR
при хранении дополняются справа пробелами до заданной длины. Эти концевые пробелы удаляются при извлечении хранимых величин.
Величины в столбцах VARCHAR
представляют собой строки переменной длины. Так же как и для столбцов CHAR
, можно задать столбец VARCHAR
любой длины между 1
и 255
. Однако, в противоположность CHAR
, при хранении величин типа VARCHAR
используется только то количество символов, которое необходимо, плюс один байт для записи длины. Хранимые величины пробелами не дополняются, наоборот, концевые пробелы при хранении удаляются (описанный процесс удаления пробелов отличается от предусмотренного спецификацией ANSI SQL).
Если задаваемая в столбце CHAR
или VARCHAR
величина превосходит максимально допустимую длину столбца, то эта величина соответствующим образом усекается.
Различие между этими двумя типами столбцов в представлении результата хранения величин с разной длиной строки в столбцах CHAR(4)
иVARCHAR(4)
проиллюстрировано следующей таблицей:
Величина | CHAR(4) | Требуемая память | VARCHAR(4) | Требуемая память |
'' | ' ' | 4 байта | '' | 1 байт |
'ab' | 'ab ' | 4 байта | 'ab' | 3 байта |
'abcd' | 'abcd' | 4 байта | 'abcd' | 5 байтов |
'abcdefgh' | 'abcd' | 4 байта | 'abcd' | 5 байтов |
Извлеченные из столбцов CHAR(4)
и VARCHAR(4)
величины в каждом случае будут одними и теми же, поскольку при извлечении концевые пробелы из столбца CHAR удаляются.
Если при создании таблицы не был задан атрибут BINARY
для столбцов, то величины в столбцах типа CHAR
и VARCHAR
сортируются и сравниваются без учета регистра. При задании атрибута BINARY
величины в столбце сортируются и сравниваются с учетом регистра в соответствии с порядком таблицы ASCII на том компьютере, где работает сервер MySQL. Атрибут BINARY
не влияет на процессы хранения или извлечения данных из столбца.
Атрибут BINARY
является ``прилипчивым''. Это значит, что, если в каком-либо выражении использовать столбец, помеченный как BINARY
, то сравнение всего выражения будет выполняться как сравнение величины типа BINARY
.
Типы данных BLOB
и TEXT
Тип данных BLOB
представляет собой двоичный объект большого размера, который может содержать переменное количество данных. Существуют 4 модификации этого типа - TINYBLOB
, BLOB
, MEDIUMBLOB
и LONGBLOB
, отличающиеся только максимальной длиной хранимых величин. Требования к памяти для различных типов столбцов.
Тип данных TEXT
также имеет 4 модификации - TINYTEXT
, TEXT
, MEDIUMTEXT
и LONGTEXT
, соответствующие упомянутым четырем типам BLOB
и имеющие те же максимальную длину и требования к объему памяти. Единственное различие между типами BLOB
и TEXT
состоит в том, что сортировка и сравнение данных выполняются с учетом регистра для величин BLOB
и без учета регистра для величин TEXT
. Другими словами,TEXT
- это независимый от регистра BLOB
.
Если размер задаваемого в столбце BLOB
или TEXT
значения превосходит максимально допустимую длину столбца, то это значение соответствующим образом усекается.
В большинстве случаев столбец TEXT
может рассматриваться как столбец VARCHAR
неограниченного размера. И, аналогично, BLOB
- как столбец типа VARCHAR BINARY
. Различия при этом следующие:
- Столбцы типов
BLOB
и TEXT
могут индексироваться в версии MySQL 3.23.2 и более новых. Более старые версии MySQL не поддерживают индексацию этих столбцов. - В столбцах типов
BLOB
и TEXT
не производится удаление концевых символов, как это делается для столбцов типа VARCHAR
. - Для столбцов
BLOB
и TEXT
не может быть задан атрибут DEFAULT
- значения величин по умолчанию.
В MyODBC величины типа BLOB
определяются как LONGVARBINARY
и величины типа TEXT - как LONGVARCHAR
.
Так как величины типов BLOB
и TEXT
могут быть чрезмерно большими, при их использовании целесообразно предусмотреть некоторые ограничения:
Чтобы обеспечить возможность использования команд
GROUP BY
ORDER BY
BLOB
TEXT
, необходимо преобразовать значение столбца в объект с фиксированной длиной. Обычно это делается с помощью функции
SUBSTRING
mysql> SELECT comment FROM tbl_name,SUBSTRING(comment,20) AS substr
-> ORDER BY substr;
Если этого не сделать, то операция сортировки в столбце будет выполнена только для первых байтов, количество которых задается параметром
max_sort_length
. Значение по умолчанию величины
max_sort_length
1024
; это значение можно изменить, используя параметр
-O
mysqld
при его запуске. Группировка выражения, включающего в себя величины
BLOB
TEXT
, возможна при указании позиции столбца или использовании псевдонима:
mysql> SELECT id,SUBSTRING(blob_col,1,100) FROM tbl_name GROUP BY 2;
mysql> SELECT id,SUBSTRING(blob_col,1,100) AS b FROM tbl_name GROUP BY b;
- Максимальный размер объекта типа
BLOB
или TEXT
определяется его типом, но наибольшее значение, которое фактически может быть передано между клиентом и сервером, ограничено величиной доступной памяти и размером буферов связи. Можно изменить размер буфера блока передачи, но сделать это необходимо как на стороне сервера, так и на стороне клиента. Настройка параметров сервера.
Следует учитывать, что внутренним представлением любой величины типа BLOB
или TEXT
является отдельно размещенный объект - в противоположность всем остальным типам столбцов, для которых память выделяется единовременно для столбца при открытии таблицы.
Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.