Файл: Лабораторна робота3.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.10.2024

Просмотров: 29

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лабораторна робота №3

Тема: Типи даних стовпців.

Мета: ознайомитися з допустимими типами столбців даних в середовищі MySQL.

1 Теоретичні відомості

MySQL підтримує декілька типів стовпців, які можна розділити на три категорії: числові типи даних, типи даних для зберігання дати і часу і символьні (рядкові) типи даних. В даній роботі ми спочатку розглянемо всі можливі типи і приведемо вимоги по зберіганню для кожного типу стовпця, потім опишемо властивості типів більш детально по кожній категорії.

Нижче перераховані типи стовпців, підтримувані MySQL. В описах використовуються позначення, які використовували розробники MySQL в офіційній документації:

M - указує максимальний розмір виведення. Максимально допустимий розмір виведення складає 255 символів.

D - вживається для типів даних з плаваючою точкою і указує кількість розрядів, слідуючого за десятковою точкою. Максимально можлива величина складає 30 розрядів, але не може бути більше, ніж M-2.

Квадратні дужки ('[' і ']') указують для типу даних групи необов'язкових ознак.

В таблиці 3.1 представлені типи полів MySQL.

Таблиця 3.1. Типи полів MySQL

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

Дуже мале ціле число. Діапазон із знаком від -128 до 127. Діапазон без знака від 0 до 255

BIT, BOOL

Синоніми TINYINT(1)

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

Мале ціле число. Діапазон із знаком від -32768 до 32767. Діапазон без знака від 0 до 65535.

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

Ціле число середнього розміру. Діапазон із знаком від -8388608 до 8388607. Діапазон без знака від 0 до 16777215

INT[(M)] [UNSIGNED] [ZEROFILL]

Ціле число нормального розміру. Діапазон із знаком від -2147483648 до 2147483647. Діапазон без знака від 0 до 4294967295

INTEGER[(M)] [UNSIGNED] [ZEROFILL]

Синонім для INT

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

Велике ціле число. Діапазон із знаком від -9223372036854775808 до 9223372036854775807. Діапазон без знака від 0 до 18446744073709551615

FLOAT(точність) [UNSIGNED] [ZEROFILL]

Число з плаваючою точкою. Атрибут точності може мати значення <=24 для числа з плаваючою точкою звичайної (одинарної) точності і між 25 і 53 - для числа з плаваючою точкою подвоєної точності. Ці типи даних схожі з типами FLOAT і DOUBLE, описаними нижче. FLOAT(X) відноситься до того ж інтервалу, що і відповідні типи FLOAT і DOUBLE, але діапазон значень і кількість десяткових знаків не визначені

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

Мале число з плаваючою точкою звичайної точності. Допустимі значення: від -3,402823466E+38 до -1,175494351E-38, 0, і від 1,175494351E-38 до 3,402823466E+38. Якщо вказаний атрибут UNSIGNED, негативні значення недопустимі. Атрибут M указує кількість знаків, що виводяться користувачу, а атрибут D - кількість розрядів, слідуючих за десятковою точкою. Позначення FLOAT без вказівки аргументів або запис вигляду FLOAT(X), де X <=24, справедливі для числа з плаваючою точкою звичайної точності.

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

Число з плаваючою точкою подвоєної точності нормального розміру. Допустимі значення: від -1,7976931348623157E+308 до -2,2250738585072014E-308, 0, і від 2,2250738585072014E-308 до 1,7976931348623157E+308. Якщо вказаний атрибут UNSIGNED, негативні значення недопустимі. Атрибут M указує кількість знаків, що виводяться користувачу, а атрибут D - кількість розрядів, слідуючого за десятковою точкою. Позначення DOUBLE без вказівки аргументів або запис вигляду FLOAT(X), де 25 <= X <= 53, справедливі для числа з плаваючою точкою подвійної точності.

DECIMAL[(M[,D])][UNSIGNED] [ZEROFILL] або DEC[(M[,D])] [UNSIGNED] [ZEROFILL] або NUMERIC[(M[,D])][UNSIGNED] [ZEROFILL]

"неупаковане" число з плаваючою точкою. Поводиться подібно стовпцю CHAR, що містить цифрове значення. Термін "неупаковане" означає, що число зберігається у вигляді рядка і при цьому для кожного десяткового знака використовується один символ. Розділовий знак десяткових розрядів, а також знак '-' для негативних чисел не враховуються в M (але місце для них зарезервовано). Якщо атрибут D рівний 0, величини будуть представлені без десяткового знака, тобто без дробової частини. Максимальний інтервал значень типа DECIMAL той же, що і для типа DOUBLE, але дійсний інтервал для конкретного стовпця DECIMAL може бути обмежений вибором значень атрибутів M і D. Якщо вказаний атрибут UNSIGNED, негативні значення недопустимі. Якщо атрибут D не вказаний, його значення за умовчанням рівне 0. Якщо не вказаний M, його значення за умовчанням рівне 10.

DATE

Дата. Підтримується інтервал від '1000-01-01' до '9999-12-31'. MySQL виводить значення DATE у форматі 'YYYY-MM-DD', але можна встановити значення в стовпець DATE, використовуючи як рядки, так і числа

DATETIME

Комбінація дати і часу. Підтримується інтервал від '1000-01-01 00:00:00' до '9999-12-31 23:59:59'. MySQL виводить значення DATETIME у форматі 'YYYY-MM-DD HH:MM:SS', але можна встановлювати значення в стовпці DATETIME, використовуючи як рядки, так і числа.

TIMESTAMP[(M)]

Тимчасова мітка. Інтервал від '1970-01-01 00:00:00' до деякого значення часу в 2037 році. MySQL виводить значення TIMESTAMP у форматах YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD або YYMMDD залежно від значень M: 14 (або відсутнє), 12, 8, або 6; але можна також встановлювати значення в стовпці TIMESTAMP, використовуючи як рядки, так і числа. Стовпець TIMESTAMP корисний для запису дати і часу при виконанні операцій INSERT або UPDATE, оскільки при цьому автоматично вносяться значення дати і часу самої останньої операції, якщо ці величини не введені програмою. Можна також встановлювати поточне значення дати і часу, задаючи значення NULL

TIME

Час. Інтервал від '-838:59:59' до '838:59:59'. MySQL виводить значення TIME у форматі 'HH:MM:SS', але можна встановлювати значення в стовпці TIME, використовуючи як рядки, так і числа.

YEAR[(2|4)]

Рік в двузначному або чотиризначному форматах (за умовчанням формат чотиризначний). Допустимі наступні значення: з 1901 по 2155, 0000 для чотиризначного формату року і 1970-2069 при використовуванні двузначного формату (70-69). MySQL виводить значення YEAR у форматі YYYY, але можна задавати значення в стовпці YEAR, використовуючи як рядки, так і числа

[NATIONAL] CHAR(M) [BINARY]

Рядок фіксованої довжини, при зберіганні завжди доповнюється пропусками в кінці рядка до заданого розміру. Діапазон аргументу M складає від 0 до 255 символів. Кінцеві пропуски віддаляються при виведенні значення. Якщо не заданий атрибут чутливості до регістра BINARY, то величини CHAR сортуються і порівнюються як незалежні від регістра відповідно до встановленого за умовчанням алфавіту. Атрибут NATIONAL CHAR (або його еквівалентна коротка форма NCHAR ) є прийнятим в ANSI SQL спосіб вказівки, що в стовпці CHAR повинен використовуватися встановлений за умовчанням набір символів ( CHARACTER ).

CHAR

Це синонім для CHAR(1).

[NATIONAL] VARCHAR(M) [BINARY]

Рядок змінної довжини. Примітка: кінцеві пропуски віддаляються при збереженні значення (в цьому полягає відмінність від специфікації ANSI SQL). Діапазон аргументу M складає від 0 до 255 символів. Якщо не заданий атрибут чутливості до регістра BINARY, то величини VARCHAR сортуються і порівнюються як незалежні від регістра.

TINYBLOB, TINYTEXT

Стовпець типа BLOB або TEXT з максимальною довжиною 255 символів

BLOB, TEXT

Стовпець типа BLOB або TEXT з максимальною довжиною 65535 символів

MEDIUMBLOB, MEDIUMTEXT

Стовпець типа BLOB або TEXT з максимальною довжиною 16777215 символів

LONGBLOB, LONGTEXT

Стовпець типа BLOB або TEXT з максимальною довжиною 4294967295 символів

ENUM('значение1','значение2'...)

Перераховуваний тип даних. Об'єкт рядка може мати тільки одне значення, вибране із заданого списку величин 'значення1', 'значення2' ..., NULL або спеціальна величина помилки " ". Список ENUM може містити максимум 65535 різних величин

SET('значение1','значение2'...)

Набір. Об'єкт рядка може мати нуль або більш значень, кожне з яких повинне бути вибрано із заданого списку величин 'значення1', 'значення2' ... Список SET може містити максимум 64 елементи



Числові типи даних

MySQL підтримує всі числові типи даних мови SQL92 за стандартами ANSI/ISO. Вони включають типи точних числових даних (NUMERIC, DECIMAL, INTEGER і SMALLINT ) і типи наближених числових даних ( FLOAT, REAL і DOUBLE PRECISION ). Ключове слово INT є синонімом для INTEGER, а ключове слово DEC - синонімом для DECIMAL.

Типи даних NUMERIC і DECIMAL реалізовані в MySQL як один і той же. Вони використовуються для величин, для яких важливо зберегти підвищену точність, наприклад для грошових даних. Необхідна точність даних і масштаб можуть задаватися (і звичайно задаються) при оголошенні стовпця даних одного з цих типів, наприклад:

salary DECIMAL(5,2)

В даному прикладі - 5 (точність) є загальною кількістю значущих десяткових знаків, з якими зберігатиметься дана величина, а цифра 2 (масштаб) задає кількість десяткових знаків після коми. Отже, в цьому випадку інтервал величин, які можуть зберігатися в стовпці salary, складає від -99,99 до 99,99 (насправді для даного стовпця MySQL забезпечує можливість зберігання чисел аж до 999,99, оскільки можна не зберігати знак для позитивних чисел).

Величини типів DECIMAL і NUMERIC зберігаються як рядки, а не як двійкові числа з плаваючою точкою, щоб зберегти точність представлення цих величин в десятковому вигляді. При цьому використовується по одному символу рядка для кожного розряду збереженої величини, для десяткового знака (якщо масштаб > 0) і для знака '-' (для негативних чисел). Якщо параметр масштабу рівний 0, то величини DECIMAL і NUMERIC не містять десяткового знака або дробової частини.

Максимальний інтервал величин DECIMAL і NUMERIC той же, що і для типа DOUBLE, але реальний інтервал може бути обмежений вибором значень параметрів точності або масштабу для даного стовпця з типом даних DECIMAL або NUMERIC. Якщо конкретному стовпцю привласнюється значення, що має більшу кількість розрядів після десяткового знака, що дозволене параметром масштабу, то дане значення округляється до кількості розрядів, дозволеного масштабу. Якщо стовпцю з типом DECIMAL або NUMERIC привласнюється значення, що виходить за межі інтервалу, заданого значеннями точності і масштабу (або прийнятого за умовчанням), то MySQL збереже дану величину із значенням відповідної граничної точки даного інтервалу.

Всі типи цілочисельних даних можуть мати необов'язковий і не обумовлений в стандарті атрибут UNSIGNED. Беззнакові величини можна використовувати для дозволу запису в стовпець тільки позитивних чисел, якщо необхідно трохи збільшити числовий інтервал в стовпці.


Тип FLOAT звичайно використовується для представлення приблизних числових типів даних. Якщо ключове слово FLOAT в позначенні типу стовпця використовується без вказівки точності, MySQL виділяє 4 байти для зберігання величин в цьому стовпці. Можливе також інше позначення, з двома числами в круглих дужках за ключовим словом FLOAT. В цьому варіанті перше число як і раніше визначає вимоги до зберігання величини в байтах, а друге число указує кількість розрядів після десяткової коми, які зберігатимуться і показуватимуться. Якщо в стовпець подібного типу спробувати записати число, що містить більше десяткових знаків після коми, чим вказано для даного стовпця, то значення величини при її зберіганні в MySQL округляється для усунення зайвих розрядів.

Для типів REAL і DOUBLE PRECISION не передбачені установки точності. В MySQL обидва типи реалізуються як 8-байтові числа з плаваючою точкою подвоєної точності. Щоб забезпечити максимальну сумісність, в коді, що вимагає зберігання приблизних числових величин, повинні використовуватися типи FLOAT або DOUBLE PRECISION без вказівок точності або кількості десяткових знаків.

Якщо в числовий стовпець спробувати записати величину, що виходить за межі допустимого інтервалу для стовпця даного типу, то MySQL обмежить величину до відповідної граничної точки даного інтервалу і збереже результат замість початкової величини.

Наприклад, інтервал стовпця INT складає від -2147483648 до 2147483647. Якщо спробувати записати в стовпець INT число -9999999999, то воно буде усічено до нижньої кінцевої точки інтервалу і замість записуваного значення в стовпці зберігатиметься величина -2147483648. Аналогічно, якщо спробувати записати число 9999999999, то замість запишеться число 2147483647.

Якщо для стовпця INT вказаний параметр UNSIGNED, то величина допустимого інтервалу для стовпця залишиться тією ж, але його граничні крапки зсунуться до 0 і 4294967295. Якщо спробувати записати числа -9999999999 і 9999999999, то в стовпці опиняться величини 0 і 4294967296.

Для команд ALTER TABLE, LOAD DATA INFILE, UPDATE і багаторядкової INSERT виводиться попередження, якщо можуть виникнути перетворення даних унаслідок вищеописаних усікань. В таблиці 4.2 представлені числові типи полів MySQL, що часто використовуються.

Таблиця 3.2.

Числові типи полів MySQL, що часто використовуються.

Тип Байт Від До

TINYINT 1 -128 127

SMALLINT 2 -32768 32767

MEDIUMINT 3 -8388608 8388607

INT 4 -2147483648 2147483647


BIGINT 8 -9223372036854775808 9223372036854775807