Типове данни в MySQL

Както стана ясно релационните бази данни съхраняват данните си в таблици, които често са свързани помежду си. Всяка таблица(релация) си има колони, в които се записват стойностите на атрибутите. Всяка колона или атрибут трябва да има определен еднозначен тип данни.

Различните езици на различните СУБД предоставят различни типове, но в по-голямата степен те се припокриват.

SQL – structured querying language представлява структуриран език за заявки, с които клиент се обръща към SQL сървър, за да ползва данните му. SQL е приет като стандарт от ANSI (American National Standards Institute) през 1986 и от ISO (Международна организация по стандартизация) през 1987. Сред най-популярните SQL езици със свободен достъп е MySQL. Най общо типовете данни в езика са разделени на следните типове: numeric types, date and time types, string (character and byte) types, spatial types, and the JSON data type.

Ще разгледаме най-основните типове:

Числови типове(Numeric Data Types):

  • INT(L)– Цяло число, може да бъде signed или За signed стойностите му варират в интервала от -2147483648 до 2147483647. За unsigned: от 0 до 4294967295. Може да специфицирате дължина до 11 цифри.
  • BIT(L) – приема две стойности – 0 или 1, ако не му се специфицира L(length). В противен случай приема до 64 бита.
  • TINYINT(L) – Много малко цяло число, което отново може да бъде signed или unsigned. За signed стойностите му варират от 32768 до 32767. За unsigned са от 0 до 65535. Можете да специфицирате дължина до 5 цифри.
  • MEDIUMINT(L) – Средно по големина цяло число, което отново може да бъде signed или unsigned. За signed стойностите му варират в интервала от -8388608 до 8388607. За unsigned са от 0 до 16777215. Можете да специфицирате дължина до 9 цифри.
  • BIGINT(L) – Голямо цяло число, което отново може да бъде signed или unsigned. За signed стойностите му варират в интервала от -9223372036854775808 до 9223372036854775807. За unsigned са от 0 до 18446744073709551615. Можете да специфицирате дължина до 20 цифри.
  • BOOL, BOOLEAN –Булев(логически) тип. Синоними е на TINYINT(1). Работи със стойности 0 (false) или която и да е друга цифра (true).
  • FLOAT(M,D) – Число с плаваща запетая, което не може да бъде беззнаково. Можете да дефинирате дължина на числото(M), както и брой числа след запетаята(D). И двата атрибута не са задължителни. Стойностите на M и на D по подразбиране са 10 и 2. Тоест 10 е броя на цифрите на числото, а 2 – броят на цифрите след десетичната запетая. Точността може да варира до максимум 24 знака след запетаята.
  • DOUBLE(M,D) – Число с плаваща запетая с двойна точност и не може да бъде беззнаково. Можете да дефинирате дължина на числото(M), както и брой числа след запетаята(D). И двата атрибута не са задължителни. Стойностите на M и на D по подразбиране са 16 и 4. Точността може да варива до 54 знака след запетаята. Типът REAL е синоним на DOUBLE.
  • DECIMAL(М, D) – Число с плаваща запетая с двойна точност, като DOUBLE, но е записано по такъв начин, че различните клиенти на БД ще прочетат числото с неговата оригинална точност . При DOUBLE, например, винаги съществува опасност от загуба на точност от закръгляне. За сметка на това предимство, работата с DECIMAL е по-бавна отколкото с DOUBLE.
  • NUMERAL(М, D), DEC(M,D), FIXED(M,D) –всички са синоними на DECIMAL.

Текстови типове(String Types):

  • CHAR(L) – Символен низ с фиксирана дължина от 1 до 255 символа. Параметърът L не е задължителен. По подразбиране стойността на L е 1. Колкото и символи да запишете под L, винаги ще се заделя памет за L символа.
  • VARCHAR(L) – Символен низ с променлива дължина. Параметърът L е задължителен. Заема толкова памет, колкото е нужно за съхранение на подадения низ. Теоретично заема 1 до 65535 символа, но от практична гледна точка може да заеме такава дължина, колкото е дължината на един ред в MySQL (общият сбор от байтове, които заемат всички колони). В по-стари версии на MySQL максималната дължина е 255.
  • BLOB или TEXT – текстови полета с максимална дължина от 65535 символа. BLOB – Binary Large Objects –обикновено се използва за съхранение на голям брой байтове, като например изображения. Всички колони, декларирани с тип TEXT обикновено се използват за съхранение на големи по обем текстове. Разликата между двата типа е. че при сортиране и при сравнения на данни при BLOB няма значение Case Sensitive, a при TEXT има. Не се специфицира дължина. TEXT полетата работят с референции към истинските стойности. Тоест в самата таблица се съхраняват указатели към реалното местоположение на символните низове. Предимство е по-малкия обем на дадената таблица, недостатък е по-бавното извличане. BLOB полетата съхраняват байтове вместо символи, както е при
  • TINYBLOB или TINYTEXT – Символни низове с максимална дължина до 255 символа. Без специфициране на дължина.
  • MEDIUMBLOB или MEDIUMTEXT – Символни низове с максимална дължина до 16777215 знака.
  • LONGBLOB или LONGTEXT – Символни низове с максимална дължина до 4294967295.
  • BINARY(bytes)Подобно на CHAR, но работи директно с битове. Ако се налага да се сравняват такива полета, то това сравнение ще трябва да е побитово. На практика работи много по-бързо от CHAR.
  • ENUM()Изброим тип данни. Например ENUM (‘X’, ‘Y’, ‘Z’). В скобите се подава списък с възможните стойности на полето. Може да бъде и NULL. Стойностите могат да бъдат максимум 65535.
  • SET() – Изброим тип данни, подобен на ENUM, но с тази разлика, че позволява в една клетка от таблицата да бъдат записани повече от една от изброените стойности.

Типове за дата и час:

  • DATE – дата във формат YYYY-MM-DD. Стойностите са между 1000-01-01 и 9999-12-31. Например датата 14 Февруари 1945 ще бъде 1945-02-14.
  • DATETIME – Дата и час във формата YYYY-MM-DD HH:MM:SS.
  • TIMESTAMP – Дата и час във формат Форматът поддържа дата и час от 1 януари 1970 до 2037 година. Няма никакви разделители между отделните компоненти на датата.
  • TIME – време, съхранено във формат HH:MM:SS.
  • YEAR(M) – година, съхранена в двуцифрено или в четирицифрено число в зависимост от параметъра За параметър 2 годините могат да бъдат от 1970 до 2069 като числата от 70 до 99 представляват годините от 1970 до 1999, а числата от 0 до 69 представляват годините от 2000 до 2069. За параметър 4 – възможните са от 1901 до 2155 година. По подразбиране стойността на М е 4. Параметър М със стойност 2 вече е deprecated.

Даниел Джолев

Leave a Reply

Your email address will not be published. Required fields are marked *