Главная > MySQL

Типы данных в MySQL

27 января 2010 | Просмотров: 3157

В MySQL определены три базовых типа столбцов: числовой, дата и время, а также строковый. Каждый из этих типов требует использования различного объема памяти. При выборе типа столбца, главное – выбрать тип, требующий наименьшего объема памяти, в котором все же помещаются данные.

Для многих типов данных при создании столбца выбранного типа можно задавать максимальную ширину отображения. В приведенных ниже таблицах типов данных этот параметр обозначается как M. Если для данного типа он не обязателен, его приводят в квадратных скобках. Максимальное значение M составляет 255.

Необязательные значения во всех описаниях заключены в квадратные скобки.

Числовые типы

Числовые типы представляют собой либо целые числа, либо числа с плавающей точкой. Для чисел с плавающей точкой можно указывать количество цифр после десятичной точки. В таблицах этот параметр обозначен как D. Максимальное значение, которое можно выбрать для D, составляет 30, или M – 2 (то есть максимальная ширина отображения минус два – один символ для вывода десятичной точки и второй для целой части числа), в зависимости от того, какое значение окажется меньшим.

Целочисленный тип может также быть определен как UNSIGNED, то есть как тип без знака - для хранения только положительных целых чисел.

Всем числовым типам можно присвоить атрибут ZEROFILL. Такие значения будут отображаться на экране с ведущими нулями.

Таблица 1 – Целочисленные типы данных
Тип Диапазон Память (байт) Описание
TINYINT[ (M) ] -127..128 или 0..255 1 Очень маленькие целые числа
BIT 1 Синоним TINYINT
BOOL 1 Синоним TINYINT
SMALLINT[ (M) ] -32768..32767 или 0..65535 2 Маленькие целые числа
MEDIUMINT[ (M) ] -8388608..8388607 или 0..16777215 3 Целые числа средней величины
INT[ (M) ] -231..231 - 1 или 0..232 - 1 4 Обычные целые числа
INTEGER[ (M) ] 4 Синоним INT
BIGINT[ (M) ] -263..263 - 1 или 0..264 - 1 8 Большие целые числа


Таблица 2 – Типы данных с плавающей запятой
Тип Диапазон Память (байт) Описание
FLOAT(точность) зависит от точности различна Может использоваться для определения чисел с плавающей точкой одинарной или двойной точности
FLOAT[ (M, D) ] ±1.175494351E-38 ±3.402823466E+38 4 Числа с плавающей точкой одинарной точности. Эквивалентно FLOAT (4), но только с указанной шириной отображения и количеством десятичных разрядов
DOUBLE[ (M, D) ] ±1.7976931348623157E+308 ±2.2250738585072014E-308 8 Числа с плавающей точкой двойной точности. Эквивалентно FLOAT (8), но только с указанной шириной отображения и количеством десятичных разрядов
DOUBLE PRECISION[ (M, D) ] ±1.7976931348623157E+308 ±2.2250738585072014E-308 8 Синоним DOUBLE [ (M, D) ]
REAL[ (M, D) ] ±1.7976931348623157E+308 ±2.2250738585072014E-308 8 Синоним DOUBLE [ (M, D) ]
DECIMAL[ (M[, D]) ] различный M + 2 Число с плавающей точкой, сохраненное как char. Диапазон зависит от ширины отображения M
NUMERIC[ (M, D) ] различный M + 2 Синоним DECIMAL
DEC[ (M, D) ] различный M + 2 Синоним DECIMAL
FIXED[ (M, D) ] различный M + 2 Синоним DECIMAL

Типы даты и времени

Система MySQL поддерживает несколько типов даты и времени, которые приведены в таблице 3. Эти типы позволяют вводить данные либо в строковом, либо в числовом формате.

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

В таблице 4 перечислены возможные типы отображения для формата TIMESTAMP.

Таблица 3 – Типы данных даты и времени
Тип Диапазон Описание
DATE 1000-01-01 ⇒ 9999-12-31 Дата. Отображается в виде ГГГГ-ММ-ДД
TIME -838:59:59 ⇒ 838:59:59 Время. Отображается в виде ЧЧ:ММ:СС. Легко заметить, что диапазон намного шире, чем может когда-либо пригодиться
DATETIME 1000-01-01 00:00:00 ⇒ 9999-12-31 23:59:59 Дата и время. Отображается в виде ГГГГ-ММ-ДД ЧЧ:ММ:СС
TIMESTAMP[ (M) ] 1970-01-01 00:00:00 ⇒ Какой-то момент в 2037 году Метка времени, полезная для формирования отчетов по транзакциям. Формат отображения зависит от значения M (см. ниже таблицу 4). Верхнее значение диапазона зависит от ограничений UNIX
YEAR[ (2|4) ] 70-69 (1970-2069) или 1901-2155 Год. Может быть указан в двух- или четырехсимвольном формате. Для каждого из них, как показано, определен свой диапазон.

Таблица 4 – Типы отображения для формата TIMESTAMP
Тип Формат отображения
TIMESTAMP ГГГГММДДЧЧММСС
TIMESTAMP(14) ГГГГММДДЧЧММСС
TIMESTAMP(12) ГГММДДЧЧММСС
TIMESTAMP(10) ГГММДДЧЧММ
TIMESTAMP(8) ГГГГММДД
TIMESTAMP(6) ГГММДД
TIMESTAMP(4) ГГММ
TIMESTAMP(2) ГГ

Строковые типы

Строковые типы в MySQL подразделяются на три группы.

Первая группа – простые строки, которые представляют собой короткие фрагменты текста. Это тип CHAR (символы фиксированной длины) и VARCHAR (символы переменной длины). Ширину каждого из них можно указать. Столбцы с типом CHAR будут дополняться пробелами до максимальной ширины, независимо от размеров данных, в то время как в столбцах с типом VARCHAR ширина зависит от размеров данных.

Следует заметить, что MySQL усекает пробелы в конце текстовых строк типа CHAR во время извлечения и в конце строк типа VARCHAR во время сохранения.

При работе с этими типами приходится искать компромисс между занимаемым объемом памяти и скоростью обработки.

Вторая группа – это типы TEXT и BLOB. Их размеры могут быть разными. Первый тип данных (TEXT) предназначен для более длинных текстовых фрагментов, второй (BLOB) – для бинарных данных. BLOB означает binary large object (большой двоичный объект) и может содержать любые данные, в том числе данные изображений или звуковых последовательностей.

На практике столбцы TEXT и BLOB идентичны, за исключением того, что данные типа TEXT зависят от регистра, а BLOB – нет.

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

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

Таблица 5 содержит описание простых строковых типов.

Таблица 5 – Обычные строковые типы
Тип Диапазон Описание
[NATIONAL] CHAR (M) [BINARY | ASCII | UNICODE] От 1 до 255 символов Строки фиксированной длины M, где M находится в диапазоне от 1 до 255. Ключевое слово NATIONAL указывает на то, что должен использоваться набор символов, установленный по умолчанию. В MySQL так и происходит по умолчанию, но на это стоит обратить внимание, поскольку данное соглашение - часть стандарта ANSI SQL. Ключевое слово BINARY указывает, что данные должны рассматриваться как зависящие от регистра. (По умолчанию данные зависят от регистра). Ключевое слово ASCII указывает, что для данного столбца будет использоваться набор символов latin1, а ключевое слово UNICODE - набор символов ucs
CHAR 1 Синоним CHAR(1)
[NATIONAL] VARCHAR (M) [BINARY] От 1 до 255 символов То же самое, за исключением того, что данные типа VARCHAR могут иметь произвольную длину.

Таблица 6 предлагает описание типов TEXT и BLOB. Максимальная длина поля TEXT определяется величиной, которую можно передать между клиентом и сервером, а значит - ограничена величиной доступной памяти и размером буфера передачи.

Таблица 6 – Типы TEXT и BLOB
Тип Максимальная длина (в символах) Описание
TINYBLOB 28 - 1 (255) Маленькое поле BLOB
TINYTEXT 28 - 1 (255) Маленькое поле TEXT
BLOB 216 - 1 (65535) Нормальное поле BLOB
TEXT 216 - 1 (65535) Нормальное поле TEXT
MEDIUMBLOB 224 - 1 (16777215) Поле BLOB среднего размера
MEDIUMTEXT 224 - 1 (16777215) Поле TEXT среднего размера
LONGBLOB 232 - 1 (4294967295) Длинное поле BLOB
LONGTEXT 232 - 1 (4294967295) Длинное поле TEXT

Таблица 7 содержит описание типов ENUM и SET

Таблица 7 – Типы ENUM и SET
Тип Максимальное количество значений в наборе Описание
ENUM('value1', 'value2', ...) 65 535 Столбцы этого типа могут содержать только одно из перечисленных значений либо NULL
SET('value1', 'value2', ...) 64 Столбцы этого типа могут содержать набор указанных значений либо NULL

Чтобы оставить коментарий Вы должны зарегистрироваться, или войти, если Вы уже зарегистрированы

Комментариев (0)