Типы данных MySQL
Таблицы состоят из столбцов и строк. Тип данных поля определяется столбцом.
MySQL поддерживает несколько типов данных.
Числовые данные — к ним относятся целые числа, не содержащие дробной части (например, 243), а также вещественные числа, состоящие из последовательности цифр, разделенных точкой (например, 46.35).
Строковые данные — последовательность символов, заключенных в одинарные или двойные кавычки: 'Hello world', '243', "MySQL". В качестве стандарта в SQL определяются одинарные кавычки, поэтому для совместимости с другими базами данных рекомендуется использовать именно их.
Календарные данные — специальный тип для обозначения даты и времени. Может принимать различную форму, например строковую "2009-03-14" или числовую 20090314. Основной характеристикой этого типа данных является их хранение ведином внутреннем формате, позволяющем осуществлять сложения и вычитания, независимо от внешнего представления.
NULL
— специальный тип данных, обозначающий отсутствие информации.
Числовые данные
Числовые данные делятся на точечные (BOOLEAN, INTEGER и DECIMAL
) и приближенные (FLOAT, REAL и DOUBLE PRECISION
).
Тип | Объем памяти | Диапазон |
---|---|---|
TINYINT[(M)] | 1 байт |
от -128 до 127 (от -27до 27-1) от 0 до 255 (от 0 до 28-1) |
SMALLINT[(M)] | 2 байта |
от -32768 до 32767 (от- 215до 215>-1) от 0 до 65535 (от 0 до 216-1) |
MIDIUMINT[(M)] | 3байта |
от- 8388608 до 8388608 (от -223до 223-1) от 0 до 16777215 (от 0 до 224-1) |
INT[(M)] INTEGER[(M)] |
4 байта |
от - 2147683648 до 2147683648 (от 0 до -231 до 231) от 0 до 4294967295(от 0 до 232-1) |
BIGINT[(M)] | 8 байт |
(от -263 до 263-1) (от 0 до 264) |
BIT[(M)] | (М+7)/8 байт | от 1 до 64 битов, в зависимости от М |
BOOL, BOOLEAN |
1 байт | Либо 0, либо 1 |
DECIMAL[(M[,D])], DEC[(M[, D)]], NUMERUC[(M[,D)]] |
М+2 байта | Повышенная точность; зависит параметров М и D |
Примечание. Здесь и далее необязательные элементы синтаксиса будут заключаться в квадратные скобки, т.е. запись TINYINT[(M)]
обозначает, элемент может быть записан и как TINYINT
, и как TINYINT(M)
.
Из таблицы видно, СУБД MySQL имеет пять целых типов: TINYINT, SMALLINT, MIDIUMINT, INT, BIGINT
. Различие между ними заключается в диапазоне величин, которые можно хранить в столбцах такого типа. Чем больше диапазон значений у типа данных, тем больше памяти для него требуется.
Примечание. Тип данных INT имеет синоним INTEGER
.
Целые типы данных могут быть объявлены положительными. Для этого после объявления типа следует использовать ключевое слово UNSIGNED. В этом случае элементам данного столбца нельзя будет присвоить отрицательные значения, а допустимый диапазон, который может принять тип, удваивается. Так, тип TINYINT
может принимать значения от -128 до 127, TINYINT UNSIGNED
— от 0 до 255.
При объявлении целого типа задается количество отводимых под число символов М (от 1 до 255)
. Это необязательное указание количества выводимых символов используется для дополнения пробелами слева от выводимых значений символов, меньших, чем заданная ширина столбца. Однако ограничений ни на диапазон величин, ни на количество разрядов не налагается. Если число символов, необходимых для вывода числа, превышает М
, под столбец будет выделено больше символов. Если дополнительно указан необязательный атрибут ZEROFILL
, свободные позиции по умолчанию заполняются нулями слева. Например,для столбца, объявленного как INT(5) ZEROFILL
, величина 4 отражается как 00004.
Тип BIT[(M)]
предназначен для хранения битовых полей. Параметр М
указывает число битовых значений, которое может принимать поле (от 1 до 64). Если параметр М
не указан, то по умолчанию принимает значение 1.
Примечание. Тип BIT
добавлен в MySQL, начиная с версии 5.0.3.
Тип BOOLEAN
является синонимом для TINYINT(1)
. Значение 1 рассматривается как истина (true
), а 0 как ложь (false
).
Тип DECIMAL
, а также его синонимы NUMERUC
и DEC предназначены для величин повышенной точности, например для денежных данных. Требуемая точность задается при объявлении столбца данных одного из этих типов, например:
salary DECIMAL(5, 2)
В этом примере цифра 5 определяет общее число символов, отводимых под число, а цифра 2 задает количество знаков после запятой. Следовательно, в этом случае интервал величин, которые могут храниться в столбце salary, составляет от -99,99 до 99.99(в действительности для данного столбца MySQL обеспечивает возможность хранения чисел вплоть до 999.99, поскольку допускается не хранить знак для положительных чисел).
Примечание. Первый параметр М
может принимать максимальное значение равное 64, второй D
— 30.
Величины типов DECIMAL, NUMERUC
и DEC
храняться как стороки, а не как двоичные числа с плавающей точкой, чтобы сохранить точность представления этих величин в десятичном виде. Если второй параметр равен 0, то величины DECIMAL
и NUMERUC
не содержат десятичного знака или дробной части.
Для представления вещественных типов в СУБД MySQL имеется три типа: FLOAT, DOUBLE, DECIMAL.
Примечание. Тип DOUBLE
имеет два синонима: PRECISION
и REAL
. Тип DECIMAL
имеет синоним NUMERIC
.
Тип | Объем памяти | Диапазон |
---|---|---|
FLOAT[(M, D)] | 4 байта |
Минимальное значение Максимальное значение |
DOUBLE[(M, D)], DOUBLE |
8 байт |
Минимальное значение Максимальное значение |
Диапазон вещественных чисел помимо максимального значения имеет также минимальное значение, которое характеризует точность данного типа. Параметр М
задает число символов для отображения всего числа, а D
— для его дробной части.
Числовые типы данных с плавающей точкой также могут иметь параметр UNSIGNED
. Как и в целочисленных типах, этот атрибут предотвращает хранение в отмеченном столбце отрицательных величин, но в отличие от целочисленных типов, максимальный интервал для величин остается прежним.
Примечание. Приближенные числовые данные могут задаваться в обычной форме, например 45.67, и в так называемой научной нотации, например 5.456Е-02 или 4.674Е+04. Символ Е
указывает на то, что число перед ним следует умножить на 10 в степени указанной после Е
. То есть приведенные числа можно записать как 0.05456 и 46740. Такой формат введен для удобства записи, т.к. числа в 300 степени неудобно представлять в обычном десятичном виде.
При выборе столбцов для формирования структуры таблицы необходимо обращать внимание на размер, занимаемый тем или иным типом данных: если значения, размещаемые в базе данных, никогда не будут выходить за пределы 100, не следует выбирать тип TINYINT
. Если же вполях столбца предполагается хранить только целочисленные данные, то применение атрибута UNSIGNED
позволит увеличить диапазон в два раза.
Ниже представлен оператор CREATE TABLE
, создающий таблицу tb1 с двумя полями:
num1
— целочисленное поле типа INT
;
num2
— поле для вещественных чисел, тип FLOAT
.
Использование оператора CREATE
CREATE TABLE tb1(
num1 INT DEFAULT 0,
num2 FLOAT DEFAULT 1.0
)
Как видно из примера, после типа столбца указано ключевое слово DEFAULT
. Оно позволяет задать значение поля по умолчанию, так для поля num1
значение по умолчанию выбрано 0, а для num2 — 1.0
. Ключевое слово DEFAULT
является не обязательным и может не указываться.
Строковые данные
Для строковых типов данныхмаксимальный размер и требования к памяти приведены в таблице. Здесь L
— длина хранимой в ячейке строки, а байты приплюсованные к L
, накладные расходы для хранения длины строки.
Тип | Объем памяти | Максимальный размер |
---|---|---|
CHAR(M) | M символов | M символов |
VARCHAR(M) | L+1 символов | M символов |
TINYBLOB, TINYTEXT | L+1 символов | 28-1 символов |
BLOB, TEXT | L+2 символов | 216-1 символов |
MEDIUMBLOB, MEDIUMTEXT | L+3 символов | 224-1 символов |
LONGBLOB, LONGTEXT | L+4 символов | 232-1 символов |
ENUM('value1', 'value2', ...) | 1 или 2 байта | 65535 элементов |
SET('value1', 'value2', ...) | 1, 2, 3, 4 или 8 байт | 64 элемента |
Тип CHAR позволяет хранить строку фиксированной длины М
, его дополняет тип VARCHAR
, позволяющий хранить переменные строки длиной L. Значение М может принимать значения от 0 до 65535.
Примечание. До версии MySQL 5.0.3 значение М для типов CHAR и VARCHAR могло принимать значения только от 0 до 255.
При выборе строкового типа данных для столбца следует принимать во внимание, что для переменных строк VARCHAR
требуется количество символов, равное длине строки плюс один байт, в то время как тип CHAR(М)
, независимо от длины строки, использует для ее хранения все М
символы. В то же время тип CHAR
обрабатывается эффективней переменных типов, т.к. всегда заранее известно, где заканчивается очередной блок данных. Сравнение типов CHAR
и VARCHAR
приведено в таблице.
Значение | CHAR(4) | VARCHAR(4) | ||
---|---|---|---|---|
представление | число байт | представление | число байт | |
' ' | ' ' | 4 байта | ' ' | 1 байт |
'ab' | ' ab' | 4 байта | 'ab' | 3 байта |
'abcd' | 'abcd' | 4 байта | 'abcd' | 5 байт |
'abcefgh' | 'abcd' | 4 байта | 'abcd' | 5 байт |
При создании таблицы нельзя смешивать столбцы типа CHAR
и VARCHAR
. Если такое происходит, СУБД MySQL изменит тип столбцов согласно правилу: в случае, когда в таблице присутствует хоть один столбец переменной длины, все столбцы типа CHAR
приводятся к типу VARCHAR
.
Типы BLOB
и TEXT
в СУБД MySQL во всем аналогичны и отличаются только в деталях. Например, при выполнении операций над столбцами типа TEXT
кодировка учитывается, а для столбцов типа BLOB
— нет.
Тип TEXT
обычно используется для хранения больших объемов текста, в то время как BLOB
— для больших двоичных объектов, таких как электронные документы, изображения, звуки и т.д.
К особым типам данных относятся ENUM
и SET
. Строки этих типов принимают значения из заранее заданного списка допустимых значений. Основное различие между ними заключается в том, что значение типа ENUM
должно содержать точно один элемент из указанного множества, тогда как столбцы SET
могут содержать любой набор элементов одновременно. Так, ячейки столбца, для которого объявлен тип данных ENUM('y', 'n')
, могут принимать только два значения: либо 'y'
, либо 'n'
. Ячейки столбца с типом данных SET
с тем же набором допустимых значений могут принимать значения ('y', 'n')
, ('y'), ('n')
и пустое множество ()
, где пустое множество означает, что не выбран ни один из элементов.
Типы ENUM
и SET
можно назвать строковыми лишь отчасти, так как при объявлении они задаются списком строк, но во внутреннем представлении базы данных элементы множеств сохраняются в виде чисел.
Элементы типа ENUM
нумеруются последовательно, начмная с 1. В зависимости от количества элементо, в в списке под хранение ячеек столбца может отводиться 1 байт (до 256 элементов) или 2 байта (от 257 до 65536).
Элементы множества SET
обрабатываются как биты, размер типа при этом также определяется количеством элементов в списке: 1 байт (от 1 до 8 элементов), 2 байта (от 9 до 16), 3 байта (от17 до 24), 4 байта (от 25 до 32) или 8 байт (от 33 до 64).
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться