Числові типи даних MySQL
MySQL підтримує всі числові типи даних мови SQL92 за стандартами ANSI/ISO. Вони включають типи точних числових даних ( NUMERIC, DECIMAL, INTEGER і SMALLINT ) і типи наближених числових даних ( FLOAT, REAL і DOUBLE PRECISION ). Ключове слово INT є синонімом для INTEGER, а ключове слово DEC – синонімом для DECIMAL.
У цьому прикладі - 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, то воно буде зсічено до нижньої кінцевої точки інтервалу і замість значення, що записується в стовпці, буде зберігатися величина -3147. Аналогічно, якщо спробувати записати число 9999999999, то натомість запишеться число 2147483647.
Якщо для стовпця INT вказано параметр UNSIGNED, то величина припустимого інтервалу для стовпця залишиться тією ж, але його граничні точки зрушать до 0 і 4294967295. Якщо спробувати записати числа -99999999999 і 999999999999, то в стовпці 9 97
Для команд ALTER TABLE, LOAD DATA INFILE, UPDATE та багаторядкового INSERT виводиться попередження, якщо можуть виникнути перетворення даних внаслідок вищенаведених усічень. У таблиці 4.2 представлені числові типи полів MySQL, що найчастіше використовуються.