Типы данных (столбцов, колонок переменных) MySQL.. Диапазоны хранимых значений -- подробное, понятное описание. Чем отличаются

Forums:

Иваньчева Т. А. Методическое пособие по языку SQL:

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

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

СУБД MySQL обеспечивает следующие типы данных:

Целые числа

Тип Возм. опции Хранимый объём Диапазон
TINYINT [(length)] [UNSIGNED] [ZEROFILL] 1 байт Диапазон числа со знаком от –128 до 127. Диапазон числа без знака (unsigned) от 0 до 255.
SMALLINT [(length)] [UNSIGNED] [ZEROFILL] 2 байт Диапазон числа со знаком от –32768 до 32767. Диапазон числа без знака (unsigned) от 0 до 65535.
MEDIUMINT [(length)] [UNSIGNED] [ZEROFILL] 3 байт Диапазон числа со знаком от –8388608 до 8388607. Диапазон числа без знака (unsigned) от 0 до 16777215.
INT (или INTEGER) [(length)] [UNSIGNED] [ZEROFILL] 4 байт Диапазон числа со знаком от –2147483648 до 2147483647. Диапазон числа без знака (unsigned) от 0 до 4294967295.
BIGINT [(length)] [UNSIGNED] [ZEROFILL] 8 байт Диапазон числа со знаком от –9223372036854775808 до 9223372036854775807. Диапазон числа без знака (unsigned) от 0 до 18446744073709551615.

где:

  • Длина поля length определяет, сколько всего цифр может иметь число при его отображении.
    По факту не определяет объём выделяемой памяти, и может вообще игнорировать выводящей программой. Используется, например вместе с ZEROFILL, например:
    INT(5) ZEROFILL; 

    значение 5 превращается в «00005».

  • ZEROFILL означает, что значение дополняется слева нулями до максимальной длины поля.
  • UNSIGNED – означает беззнаковое число (т.е. что не требуется хранить отрицательные числа).
  • Атрибут AUTO_INCREMENT при определении столбца можно использовать только в одном поле таблицы. Обратите внимание также, что это поле должно быть объявлено как первичный ключ, и должно быть числовым.

Вещественные числа

Вещественные или дробные числа в общем виде записываются так:

ИмяТипа[(length, dec)] [UNSIGNED]

Где length – количество знакомест(ширина поля), в которых
будет размещено дробное число, dec – количество знаков после
точки.

  1. FLOAT [(значение_точности)] - Число с плавающей запятой. FLOAT(4) и FLOAT одиночная точность. FLOAT(8) обеспечивает двойную точность.
  2. FLOAT [(length,dec)] - Число одиночной точности с мак-симальной длиной и фиксированным числом десятичных чисел (4 байта).
  3. DOUBLE - Число с плавающей запятой, обеспечивает двойную точность.
  4. REAL - Синоним для DOUBLE
  5. DECIMAL - Дробное число, хранящееся в виде строки

Например:

FLOAT( 9, 2 )

– вещественное число, состоящее из 9 цифр и имеющее 2 цифры после точки.

Строки - строковый тип данных

  1. CHAR(NUM) - Строки фиксированной длины 65 535 символов
  2. VARCHAR(NUM) - Строка переменной длины 65 535 символов
  3. TINYTEXT - Может хранить максимум 255 символов
  4. TEXT - Может хранить максимум 65 535 символов
  5. MEDIUMTEXT - Может хранить максимум 16 777 215
  6. LONGTEXT - Может хранить максимум 4 294 967 295 символов

Строковый тип данных позволяет хранить текстовую информацию.
Где NUM при определении типа означает длину строки. Чаще всего применяется тип TEXT.
Обычно при поиске по текстовым полям по запросу SELECT не берется в рассмотрение регистр символов, т.е. строки «ФЕДЯ» и «Федя» считаются
одинаковыми.
Однако если указан флаг BINARY, то при запросе SELECT строка будет сравниваться с учетом регистра.
Например:

VARCHAR(50) BINARY.

Строка может заключаться либо в одинарные кавычки ( ') либо в двойные кавычки ( « ).

Примеры правильных строк:

'hello' 
«hello» 
'»»hello»»'  
«'ello» 
«'e»l»lo»  
'\'hello'  
«This\nIs\nFour\nlines»

Апострофы, если они используются внутри строки, удваиваются.

Бинарные данные (BLOB)

  1. TINYBLOB - Двоичный объект с максимальной длиной 255 байт.
  2. BLOB - Двоичный объект (максимальная длина 65535 байт)
  3. MEDIUMBLOB - Двоичный объект с максимальной длиной 16777216 байт.
  4. LONGBLOB - Двоичный объект с максимальной длиной 232 байт.

Тип данных BLOB (Binary Large Object) используется для хранения рисунков, фотографий, графиков и других двоичных объектов в базе данных.

Дата и время

  1. DATE - 3 байт - Дата в формате ГГГГ-ММ-ДД
  2. TIME - 3 байт - Время в формате ЧЧ:ММ:СС
  3. DATETIME - 8 байт - Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
  4. TIMESTAMP - 4 байт - Дата и время в формате Unix timestamp. Однако при получении значения поля оно отображается не в формате timestamp, а в виде ГГГГММДДЧЧММСС, что сильно умаляет преимущества его использования в PHP.
  5. YEAR[(M)] - 1 байт - От 1901 до 2155 для YEAR(4) От 1970 до 2069 для YEAR(2)

Этот тип данных используется для хранения данных о дате и времени.
Столбцы YEAR предназначены для хранения только года, указание параметра M позволяет задать формат года.

Так, для YEAR(2) год представляется в виде двух цифр, например 05 или 97, с диапазоном данных от 1970 до 2069.
А тип YEAR(4) позволяет задать тип в виде 4 цифр YYYY, например 2005 или 1997, с диапазоном от 1901 до 2155 года. Если параметр не указан, то по умолчанию он считается равным 4.
Надо заметить, что в некоторых случаях в PHP будет проще самостоятельно генерировать дату и время при вставке данных в таблицу, а не задействовать встроенные в MySQL типы.

Перечисления(ENUM)

При использовании этого типа данных значением столбца может быть только одно значение из заданного списка. Примеры:

ENUM(‘Y’,’N’)
ENUM(‘show’,’hide’)

Определение столбца задано так:

`hide`  enum(‘show’,’hide’)  NOT  NULL  default  ‘show’; 

- здесь
столбец с именем hide (т.к. его имя совпадает с ключевым словом, поэтому имя взято в обратные кавычки) может иметь только одно значение из заданного списка ‘show’,’hide’. Значением по умолчанию для этого столбца является значение ‘show’.

Множества(SET)

Значением столбца может быть одно или несколько значений из заданного списка. Например, поле f1 определено следующим образом:

f1 SET(‘a’,’b’,’c’,’d’) default (‘a,b,c’);

Значением этого поля может быть как ‘a’ и ‘a’,’b’,так и ‘a’,’b’,’c’ и ‘a’,’b’,’c’,’d’.

Источники: