Перейти к содержимому

Decimal это какой тип данных

  • автор:

Decimal это какой тип данных

Числовые данные разделяются на точные и приближенные, на целые и вещественные. В отдельную категорию можно отнести битовые значения.

Тип Объем памяти Диапазон
TINYINT 1 байт от -128 до 127 (от -2 7 до 2 7 -1)
от 0 до 255 (от 0 до 2 8 -1)
SMALLINT 2 байта от -32768 до 32767 (от -2 15 до 2 15 -1)
от 0 до 65535 (от 0 до 2 16 -1)
MEDIUMINT 3 байта от -2 23 до 2 23 -1
от 0 до 2 24 -1
INT
INTEGER
(синонимы)
4 байта от -2 31 до 2 31 -1
от 0 до 2 32 -1
BIGINT 8 байт от -2 63 до 2 63 -1
от 0 до 2 64 -1

Целые числа могут быть объявлены с ключевым словом UNSIGNED . В этом случае элементам данного столбца нельзя будет присвоить отрицательные значения, а допустимый диапазон, которые принимает тип удваивается. Так, тип TINYINT может принимать значения от -128 до 127, а TINYINT UNSIGNED — от 0 до 255.

Тип Диапазон
DEC[(M,D)]
DECIMAL[(M,D)]
(синонимы)
Зависит от параметров M и D

Тип DECIMAL хранит точное вещественное значение данных. Он используется, когда точность является критически важной. Например, при хранении финансовых данных.

MySQL
CREATE TABLE Users ( ... salary DECIMAL(5,2) ); 

В данном примере объявляется, что в колонке salary будут хранится числа, имеющие максимум 5 цифр, причём 2 из которых отведены под десятичную часть. То есть, в данной колонке будут храниться значения в промежутке от -999.99 до 999.99.

Синтаксис DECIMAL эквивалентен DECIMAL(M) и DECIMAL(M,0) . По умолчанию, параметр M равен 10.

Целая часть и часть после точки хранятся как 2 отдельных целых числа. На основании этого факта можно легко рассчитать затрачиваемый объем памяти. Так у DECIMAL(5,2) целая часть содержит 3 цифры и занимает 2 байта, часть после точки 2 цифры - достаточно 1 байта. Итого, на хранение будет потрачено 3 байта.

Тип Объем памяти Диапазон
BIT[(M)] M бит От 1 до 64 битов, в зависимости от значения M
BOOL
BOOLEAN
(синонимы)
1 бит Либо 0, либо 1

Тип данных Decimal (Visual Basic)

Содержит 128-разрядные (16-байтные) значения со знаком, представляющие 96-разрядные (12-байтные) целые числа с переменной степенью, кратной 10. Коэффициент масштабирования указывает количество цифр справа от десятичной запятой; он может быть в диапазоне от 0 до 28. При шкале 0 (без десятичных знаков) максимально возможное значение — +/-79 228 162 514 264 337 593,5 43 950 335 (+/-7,9228162514264337593543950335E+28). С 28 десятичными знаками наибольшее значение — +/-7,92281625142643375935943950335, а наименьшее ненулевое значение — +/-0,000000000000000000000000000000000000001 (+/-1E-28).

Комментарии

Тип Decimal данных предоставляет наибольшее количество значимых цифр для числа. Он поддерживает до 29 значимых цифр и может представлять значения, превышающие 7,9228 x 10^28. Он особенно подходит для расчетов, таких как финансовые, для которых требуется большое количество цифр, но не допускается округление ошибок.

Значение по умолчанию для типа Decimal — 0.

Советы по программированию

  • Точность. Decimal не является типом данных с плавающей запятой. Структура Decimal содержит двоичное целочисленное значение, а также бит знака и целочисленный коэффициент масштабирования, указывающий, какая часть значения является десятичной дроби. Поэтому числа имеют более точное представление в памяти, Decimal чем типы с плавающей запятой ( Single и Double ).
  • Производительность. Тип Decimal данных является самым медленным из всех числовых типов. Прежде чем выбирать тип данных, необходимо взвесить важность точности и производительности.
  • Расширение. Тип Decimal данных расширяется до Single или Double . Это означает, что вы можете выполнить преобразование Decimal в любой из этих типов без возникновения ошибок System.OverflowException .
  • Конечные нули. Visual Basic не хранит конечные нули в литерале Decimal . Однако переменная Decimal сохраняет все конечные нули, полученные вычислительными средствами. Это показано в следующем примере.
Dim d1, d2, d3, d4 As Decimal d1 = 2.375D d2 = 1.625D d3 = d1 + d2 d4 = 4.000D MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) & ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4)) 

MsgBox Результат в предыдущем примере выглядит следующим образом:

d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4 

Диапазон

Чтобы присвоить большое D значение переменной или константе, может потребоваться Decimal использовать символ типа. Это требование обусловлено тем, что компилятор интерпретирует литерал как Long , если только символ литерального типа не следует за литералом, как показано в следующем примере.

Dim bigDec1 As Decimal = 9223372036854775807 ' No overflow. Dim bigDec2 As Decimal = 9223372036854775808 ' Overflow. Dim bigDec3 As Decimal = 9223372036854775808D ' No overflow. 

Объявление для bigDec1 не приводит к переполнению, так как назначенное ему значение попадает в диапазон для Long . Значение Long можно присвоить переменной Decimal .

Объявление для bigDec2 создает ошибку переполнения, так как присвоенное ему значение слишком велико для Long . Поскольку числовый литерал не может быть сначала интерпретирован как Long , его нельзя присвоить переменной Decimal .

Для bigDec3 символ D литерального типа решает проблему, заставляя компилятор интерпретировать литерал как , Decimal а не как Long .

См. также раздел

  • System.Decimal
  • Decimal
  • Math.Round
  • Типы данных
  • Тип данных Single
  • Тип данных Double
  • Type Conversion Functions
  • Сводка по преобразованию
  • Эффективное использование типов данных

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Типы данных в MySQL

В этой инструкции рассказываем про основные типы данных в MySQL и даем советы, где лучше использовать тот или иной тип.

Эта инструкция — часть курса «MySQL для новичков».

Смотреть весь курс

Введение

При создании таблиц в MySQL для каждого столбца нужно указывать тип данных. Он определяет, какие данные там могут храниться, как будут обрабатываться и сколько места будут занимать. В MySQL все типы данных делятся на несколько классов: числовые типы, символьные, дата/время и так далее. В каждом классе есть несколько типов данных, которые внешне могут быть похожи, но их поведение или принципы хранения отличаются. Важно выбрать правильный тип сразу при создании таблицы, потому что потом готовую структуру и приложения будет сложней переделать.

В этой статье мы расскажем об основных типах данных в MySQL и дадим советы, где лучше использовать тот или иной тип.

Возможности MySQL в «Облачных базах данных»

Числовые типы

Используются для хранения чисел. Бывают целочисленными, с плавающей точкой и с фиксированной точкой.

Целые числа

Хранят только целые числа, без дробной части. Делятся на signed (со знаком) и unsigned (без знака). Типы singed позволяют хранить как положительные, так и отрицательные значения. Типы unsigned хранят только положительные числа, но зато диапазон значений больше. Это может быть полезно в случаях, когда хранимые значения заведомо не могут быть отрицательным. Например, количество товара или идентификатор записи в таблице.

Тип Размер (байт) Диапазон signed Диапазон unsigned
TINYINT 1 -128 … 127 0 … 255
SMALLINT 2 -3 2768 … 32 767 0 … 65 535
MEDIUMINT 3 -8 388 608 … 8388607 0 … 16 777 215
INT 4 2 147 483 648 … 2 147 483 647 0 … 42 94 967 295
BIGINT 8 -2 63 … 2 63 -1 0 … 2 64 -1

Числа с плавающей точкой

Хранят приблизительные значения. Не резервируют определенное количество бит для целочисленной или дробной частей. Поэтому у всех значений в таблице количество до и после запятой будет разным.

Тип Размер (байт) Диапазон
FLOAT 4 -3.402823466E+38 … -1.175494351E-38 и 1.175494351E-38 … 3.402823466E+38
DOUBLE 8 -1.7976931348623157E+308 … -2.2250738585072014E-308 и2.2250738585072014E-308 … 1.7976931348623157E+308

До версии MySQL 8.0.17 эти типы данных поддерживали диапазон unsigned, но он работал не так, как с целыми числами. Беззнаковый диапазон просто запрещал сохранять отрицательные значения, при этом максимальное значение не увеличивалось. Начиная с версии 8.0.17, использование unsigned не рекомендуется и считается устаревшим. В будущих версиях MySQL поддержку беззнакового диапазона для этого типа данных могут вовсе удалить.

Числа с фиксированной точкой

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

В MySQL для хранения чисел с фиксированной точкой используются типы DECIMAL(M,D) и NUMERIC(M,D), но по факту это синонимы. Можно использовать любой из этих типов, результат будет одинаковым. В таких столбцах максимально можно хранить до 65 чисел вместе с целочисленной и дробной частями.

Символьные (строковые)

Символьные типы используются для хранения текстов. Есть два основных типа: CHAR и VARCHAR. С точки зрения пользователя они выглядят похоже, но MySQL хранит и обрабатывает их по-разному.

  • CHAR хранит строку фиксированной длины до 255 символов. Если длина вставляемой записи меньше, то MySQL автоматически дополняет значение пробелами. Например, если мы указали тип CHAR(10) и сохранили строку «Привет», то по факту в БД будет храниться строка «Привет » (обратите внимание на четыре пробела в конце строки).

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

  • VARCHAR хранит строки переменной длины до 65 535 символов. Причем в памяти хранится именно та длина, которая была указана при создании. VARCHAR занимает меньше места, чем CHAR, но подвержен фрагментации и из-за этого может проигрывать в скорости обработки данных.

Текстовые и бинарные

Текстовые (TEXT) и бинарные (BLOB) типы данных используются для хранения больших объемов текста или двоичных данных. Эти типы похожи, но отличаются по способу хранения и обработки внутри MySQL.

  • BLOB обрабатывается как двоичные данные. В нем не хранится набор символов, а операции сортировки и сравнения основаны на числовых значениях байтов.
  • TEXT обрабатывается как символьные строки. В нем хранится именно набор символов, а значения сортируются и сравниваются на основе сопоставления набора символов..

Текстовые типы отлично подходят для хранения больших текстов: статей, докладов и так далее. А бинарные типы могут хранить любые файлы или мультимедиа-контент.

Тип Размер (байт) Макс. размер символов
TINYTEXT / TINYBLOB 255 255
TEXT / BLOB 65 535 65 535
MEDIUMTEXT / MEDIUMBLOB 16 777 215 2 24 -1
LONGTEXT / LONGBLOB 4 294 967 295 2 32 -1

Кажется, что типы TINYTEXT и TEXT похожи на CHAR и VARCHAR. Но разница в том, что MySQL не умеет индексировать текстовые и бинарные типы и не может использовать индексы для сортировки.

Дата/время

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

Тип Размер (байт) Описание
DATE 3 Только дата в формате YYYY-MM-DD. Допустимые значения от 1000-01-01 до 9999-12-31
DATETIME 8 Дата и время в формате YYYY-MM-DD HH:MM:SS. Допустимые значения от 1000-01-01 00:00:00 до 9999-12-31 23:59:59
TIMESTAMP 4 Дата и время. Хранится в виде количества секунд, прошедших с 1 января 1970 года по гринвичу. Занимает в два раза меньше места, чем тип DATETIME. Но при этом диапазон ограничен значениями от 1970-01-01 00:00:01 до 2038-01-09 03:14:07
TIME 3 Только время в формате HH:MM:SS. Допустимые значения от 00:00:00 до 23:59:59
YEAR(N) 1 Только год в формате YYYY или YY. Допустимые значения от 1901 до 2155 или от 70 до 69 (1970 — 2069)

JSON

Это относительно новый тип данных, который появился в MySQL версии 5.7.8. Он позволяет нативно хранить и обрабатывать данные в JSON-формате.

В отличие от хранения объектов в виде текста, в использовании специального типа данных есть несколько преимуществ:

  1. Валидация JSON-объектов. Если попытаться сохранить неправильный JSON, MySQL сгенерирует ошибку.
  2. Возможность нативно работать с JSON, выбирать и обновлять только отдельные части объектов, а не весь объект целиком.
  3. MySQL сохраняет тип JSON в специальном внутреннем формате. Такой способ более производительный, чем работа с JSON в виде строки.

Составные типы

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

  • ENUM может хранить только одно значение из списка, занимает 1-2 байта.
  • SET может хранить одновременно до 64 значений из списка, занимает от 1 до 8 байт.

Заключение

Мы рассмотрели основные типы данных и полей в MySQL, объяснили разницу между схожими типами. Теперь вы можете создавать свои структуры БД, используя полученные знания.

Создание базы данных в MySQL

Decimal это какой тип данных

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *