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

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

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

Добавлен: 01.10.2024

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

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

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

Як результат виконання функції, що повертає величину, прийнятну в контексті типу даних YEAR (такий як NOW() ).

Неприпустимі величини YEAR перетворяться в 0000.

Символьні типи даних

Існують наступні символьні типи даних: CHAR, VARCHAR, BLOB, TEXT, ENUM і SET. Розглянемо опис їх роботи, вимог до їх зберігання і використовування їх в запитах. В таблиці 4.5 приведені символьні типи даних і їх розмірність.

Таблиця 3.5. Символьні типи даних

Тип Макс.размер Байт

TINYTEXT або TINYBLOB 2^8-1 255

TEXT або BLOB 2^16-1 (64K-1) 65535

MEDIUMTEXT або MEDIUMBLOB 2^24-1 (16M-1) 16777215

LONGBLOB 2^32-1 (4G-1) 4294967295

Типи даних CHAR і VARCHAR

Типи даних CHAR і VARCHAR дуже схожі між собою, але розрізняються за способами їх зберігання і витягання.

В стовпці типа CHAR довжина поля постійна і задається при створенні таблиці. Ця довжина може приймати будь-яке значення між 1 і 255. Величини типа CHAR при зберіганні доповнюються справа пропусками до заданої довжини. Ці кінцеві пропуски віддаляються при витяганні бережених величин.

Величини в стовпцях VARCHAR є рядками змінної довжини. Так само як і для стовпців CHAR, можна задати стовпець VARCHAR будь-якої довжини між 1 і 255. Проте, в протилежність CHAR, при зберіганні величин типа VARCHAR використовується тільки та кількість символів, яка необхідна, плюс один байт для запису довжини. Бережені величини пропусками не доповнюються, навпаки, кінцеві пропуски при зберіганні віддаляються.

Якщо CHAR або VARCHAR величина, що задається в стовпці, перевершує максимально допустиму довжину стовпця, то ця величина відповідним чином усікається.

Відмінність між цими двома типами стовпців в представленні результату зберігання величин з різною довжиною рядка в стовпцях CHAR(4) і VARCHAR(4) проілюстрована наступною таблицею 3.6.

Таблиця 3.6.

Результат зберігання величин з різною довжиною рядка типів Char і Varchar

Величина CHAR(4) Пам'ять VARCHAR(4) Пам'ять

'' ' ' 4 байти ' ' 1 байт

'ab' 'ab ' 4 байти 'ab' 3 байти

'abcd' 'abcd' 4 байти 'abcd' 5 байтів

'abcdefgh' 'abcd' 4 байти 'abcd' 5 байтів

Витягнуті із стовпців CHAR(4) і VARCHAR(4) величини в кожному випадку будуть одними і тими ж, оскільки при витяганні кінцеві пропуски із стовпця CHAR віддаляються.


Якщо при створенні таблиці не був заданий атрибут BINARY для стовпців, то величини в стовпцях типа CHAR і VARCHAR сортуються і порівнюються без урахування регістра. При завданні атрибута BINARY величини в стовпці сортуються і порівнюються з урахуванням регістра відповідно до порядку таблиці ASCII на тому комп'ютері, де працює сервер MySQL.


Типи даних blob і text

Тип даних BLOB є двійковим об'єктом великого розміру, який може містити змінну кількість даних. Існують 4 модифікації цього типу - TINYBLOB, BLOB, MEDIUMBLOB і LONGBLOB, відмінні тільки максимальною завдовжки бережених величин.

Тип даних TEXT також має 4 модифікації - TINYTEXT, TEXT, MEDIUMTEXT і LONGTEXT, відповідні згаданим чотирьом типам BLOB і мають ті ж максимальну довжину і вимоги до об'єму пам'яті. Єдина відмінність між типами BLOB і TEXT полягає в тому, що сортування і порівняння даних виконуються з урахуванням регістра для величин BLOB і без урахування регістра для величин TEXT. Іншими словами, TEXT - це незалежний від регістра BLOB.

Якщо розмір BLOB або TEXT значення, що задається в стовпці, перевершує максимально допустиму довжину стовпця, то це значення відповідним чином усікається.

Тип переліку enum

ENUM (перелік) - це стовпець, який може приймати значення із списку допустимих значень, явно перерахованих в специфікації стовпця у момент створення таблиці.

Перелік може мати максимум 65535 елементів.

Регістр не грає ролі, коли ви робите вставку в стовпець ENUM. Проте регістр значень, одержуваних з цього стовпця, співпадає з регістром в написанні відповідного значення, заданого під час створення таблиці.

Якщо вам потрібно одержати список можливих значень для стовпця ENUM, ви повинні викликати SHOW COLUMNS FROM імя_таблиці LIKE імя_колонки_enum і проаналізувати визначення ENUM в другому стовпці.

Тип множини set

SET - це рядковий тип, який може приймати нуль або більш значень, кожне з яких повинне бути вибрано із списку допустимих значень, визначених при створенні таблиці. Елементи множини SET розділяються комами. Як наслідок, самі елементи множини не можуть містити ком.

Наприклад, стовпець, визначений як SET("один", "два") NOT NULL може приймати такі значення:

""

"один"

"два"

"один, два"

Множина SET може мати максимум 64 різні елементи.

Крайові пропуски віддаляються із значень множини SET у момент створення таблиці.

Якщо ви вставляєте в стовпець SET некоректну величину, це значення буде проігноровано.

Якщо вам потрібно набути всі можливі значення для стовпця SET, вам слід викликати SHOW COLUMNS FROM імя_таблиці LIKE імя_колонки_set і проаналізувати SET-визначення в другому стовпці.


Вибір правильного типу даних в стовпці

Для того, щоб пам'ять використовувалася найбільш ефективно, завжди слід прагнути застосовувати тип даних, що забезпечує максимальну точність. Наприклад, для величин в діапазоні між 1 і 99999 в цілочисельному стовпці якнайкращим типом буде MEDIUMINT UNSIGNED.

Часто доводиться стикатися з такою проблемою, як точне представлення грошових величин. В MySQL для представлення таких величин необхідно використовувати тип даних DECIMAL. Оскільки дані цього типу зберігаються у вигляді рядка, втрат в точності не відбувається. А у випадках, коли точність не має дуже великого значення, цілком підійде і тип даних DOUBLE.

Якщо ж потрібна висока точність, завжди можна виконати конвертацію в тип даних з фіксованою точкою. Такі дані зберігаються у вигляді BIGINT. Це дозволяє виконувати всі обчислення з ними як з цілими числами, а згодом при необхідності результати можна перетворити назад у величини з плаваючою точкою.


Вимоги до пам'яті для різних типів стовпців

Вимоги до об'єму пам'яті для стовпців кожного типу, підтримуваного MySQL, перераховані нижче по категоріях.

Вимоги до пам'яті для числових типів приведені в таблиці 4.7

Таблиця 3.7. Вимоги до пам'яті для числових типів

Тип стовпця Необхідна пам'ять

TINYINT 1 байт

SMALLINT 2 байти

MEDIUMINT 3 байти

INT 4 байти

INTEGER 4 байти

BIGINT 8 байтів

FLOAT(X) 4, якщо X <= 24 або 8, якщо 25 <= X <= 53

FLOAT 4 байти

DOUBLE 8 байтів

DOUBLE PRECISION 8 байтів

REAL 8 байтів

DECIMAL(M,D) M+2 байт, якщо D > 0, M+1 байт, якщо D = 0 (D+2, якщо M < D)

NUMERIC(M,D) M+2 байт, якщо D > 0, M+1 байт, якщо D = 0 (D+2, якщо M < D)

Вимоги до пам'яті для типів дати і часу приведені в таблиці 3.8.

Таблиця 3.8. Вимоги до пам'яті для типів дати і часу

Тип стовпця Необхідна пам'ять

DATE 3 байти

DATETIME 8 байтів

TIMESTAMP 4 байти

TIME 3 байти

YEAR 1 байт

Вимоги до пам'яті для символьних типів приведені в таблиці 4.9.

Таблиця 3.9.

Вимоги до пам'яті для символьних типів

Тип стовпця Необхідна пам'ять

CHAR(M) M байт, 1 <= M <= 255

VARCHAR(M) L+1 байт, де L <= M і 1 <= M <= 255

TINYBLOB, TINYTEXT L+1 байт, де L < 2^8

BLOB, TEXT L+2 байт, де L < 2^16

MEDIUMBLOB, MEDIUMTEXT L+3 байт, де L < 2^24

LONGBLOB, LONGTEXT L+4 байт, де L < 2^32

ENUM('value1','value2'...) 1 або 2 байт, залежно від кількості перераховуваних величин (максимум 65535)

SET('value1','value2'...) 1, 2, 3, 4 або 8 байт, залежно від кількості елементів множини (максимум 64)

Практична частина

Перегляньте вибрані вами типи даних для полів таблиць майбутньої бази даних. При необхідності перепризначуйте вибрані вами типи. На підставі наявної інформації, розрахуйте точний початковий розмір кожного файлу (один файл міститиме одну таблицю), виходячи з того, що спочатку файл міститиме тільки один запис. Максимальний розмір файлу слід розраховувати на підставі загальної кількості записів.

Зрештою вимагається розрахувати початковий і допустимий розмір заповненої бази даних.