Какой тип данных использовать для цены sql
Перейти к содержимому

Какой тип данных использовать для цены sql

  • автор:

Какой тип поля SQL Server лучше всего подходит для хранения значений цен?

Мне интересно, какой лучший тип для поля цены в SQL Server для магазина-подобной структуры?

Рассматривая этот обзор, у нас есть типы данных, называемые деньгами, smallmoney, тогда у нас есть десятичная/числовая и, наконец, float и real.

Название, память/использование диска и диапазоны значений:

  • Деньги: 8 байт (значения: -922,337,203,685,477.5808 до +922,337,203,685,477.5807)
  • Smallmoney: 4 байта (значения: -214,748.3648 до +214,748.3647)
  • Десятичный: 9 [по умолчанию, мин. 5] байтов (значения: -10 ^ 38 +1 до 10 ^ 38 -1)
  • Float: 8 байт (значения: -1.79E + 308 до 1.79E + 308)
  • Реальный: 4 байта (значения: -3.40E + 38 до 3.40E + 38)

Действительно ли разумно хранить значения цен в этих типах? Как насчет, например. INT?

  • Int: 4 байта (значения: -2,147,483,648 до 2,147,483,647)

Допустим, что в магазине используются доллары, у них есть центы, но я не вижу, чтобы цены составляли $49.2142342, поэтому использование большого количества десятичных знаков, показывающих центы, кажется пустой тратой пропускной способности SQL. Во-вторых, большинство магазинов не будут показывать цены около 200.000.000 (не в обычных интернет-магазинах, по крайней мере, если кто-то не пытается продать мне знаменитую башню в Париже)

Так почему бы не пойти на int?

int быстрый, его только 4 байта, и вы можете легко сделать десятичные числа, сохраняя значения в центах вместо долларов, а затем делитесь, когда вы представляете значения.

Другим подходом было бы использование smallmoney, который также составляет 4 байта, но для этого потребуется, чтобы математическая часть ЦП выполняла вычисление, где, поскольку Int является целочисленной мощностью. с нижней стороны, вам нужно будет разделить все единственный результат.

Существуют ли какие-либо проблемы с «валютой» с региональными настройками при использовании smallmoney/money fields? что они будут передавать в С#/. NET?

Любые плюсы и минусы? Пойдите для целых цен или smallmoney или некоторых других?

Какой тип поля SQL Server лучше всего подходит для хранения значений цены?

Мне интересно, какой тип лучше всего подходит для поля цены в SQL Server для структуры, подобной магазину?

смотрим обзор у нас есть типы данных, которые называются деньги, smallmoney, то есть decimal / numeric и наконец float и реальные.

имя, память/диск-использование и диапазоны значений:

  • деньги: 8 байт (значения: -922,337,203,685,477.От 5808 до +922,337,203,685,477.5807)
  • Smallmoney: 4 байта (значения: -214,748.3648 до +214,748.3647)
  • Decimal: 9 [по умолчанию, мин. 5] байт (значения: -10^38 +1 до 10^38 -1 )
  • поплавок: 8 байт (значения: -1.79 E+308 до 1.79 E+308 )
  • Real: 4 байта (значения: -3.40 E+38 до 3.40 E+38 )

действительно ли разумно хранить значения цен в тех типы? Как насчет eg. INT?

  • Int: 4 байта (значения: от -2,147,483,648 до 2,147,483,647)

допустим, магазин использует доллары, у них есть центы, но я не вижу, чтобы цены были $49.2142342, поэтому использование множества десятичных знаков, показывающих центы, кажется пустой тратой полосы пропускания SQL. Во-вторых, большинство магазинов не показали бы цены около 200.000.000 (не в обычных интернет-магазинах, по крайней мере, если кто-то не пытается продать мне знаменитую башню в Париже)

Так почему бы не пойти на int?

int быстрый, его только 4 байта, и вы можете легко сделать десятичные дроби, сохраняя значения в центах вместо долларов, а затем разделить, когда вы представляете значения.

другим подходом было бы использовать smallmoney, который также составляет 4 байта, но для этого потребуется математическая часть процессора для выполнения calc, где As Int-целочисленная мощность. с другой стороны, вам нужно будет разделить каждый результат.

есть ли какая-либо» валюта», связанная проблемы с региональными настройками при использовании полей smallmoney / money? что они тоже будут передавать в C# / .NET ?

какие плюсы/минусы? Перейти на целочисленные цены или smallmoney или некоторые другие?

Что говорит ваш опыт?

7 ответов

если вы абсолютно уверены, что ваши номера всегда будут оставаться в диапазоне smallmoney , используйте это, и вы можете сохранить несколько байтов. В противном случае я бы использовал money . Но помните, в наши дни хранение дешево. Дополнительные 4 байта за 100 млн записей все еще меньше половины ГБ. Однако, как указывает @marc_s, используя smallmoney Если вы можете, это уменьшит объем памяти SQL server.

короче говоря, если вы можете уйти с smallmoney , do. Если вы думаете вы может перейти на МАКС, использовать money .

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

мой аргумент против использования int : зачем изобретать колесо, сохраняя int и потом, не забудьте разделить на 100 (10000), чтобы получить значение и умножить обратно, когда вы идете, чтобы сохранить значение. В моем понимании типы денег используют int или long как базовый тип хранения в любом случае.

что касается соответствующего типа данных в .NET, это будет decimal (что также позволит избежать округления в коде C#).

использовать деньги тип данных, если вы храните деньги (если только моделирование огромных сумм денег, таких как государственный долг) — это позволяет избежать вопросов точности/округления.

ИСПОЛЬЗУЙТЕ ЧИСЛОВОЙ / ДЕСЯТИЧНЫЙ. Избегайте денег / SMALLMONEY. вот пример того, почему. Рано или поздно типы MONEY / SMALLMONEY, вероятно, подведут вас из-за ошибок округления. Типы денег полностью избыточны и не достигают ничего полезного — сумма валюты является просто еще одним десятичным числом, как и любое другое.

наконец, типы MONEY / SMALLMONEY являются собственностью Microsoft. Числовые / десятичные являются частью стандарта SQL. Они используются, признаются и поняты большим количеством людей и поддерживаются большинством DBMSs и другим программным обеспечением.

лично я бы использовал smallmoney или деньги для хранения магазинных цен.

использование int добавляет сложность в другом месте.

и 200 миллионов совершенно действительная цена в корейских вон или индонезийских рупиях тоже.

типы данных SQL money и smallmoney оба разрешают c# decimal тип:

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

Я бы пошел за типом данных Money. Invididually вы не можете превышать значение в Smallmoney, но было бы легко для нескольких элементов, чтобы превысить его.

в моем приложении ломбарда, операторы ломбарда кредитовать от $5.00 до $10,000.00 Когда они вычисляют сумму кредита, они округляют ее до ближайшего доллара, чтобы избегайте работы с центами (то же самое относится к процентным платежам). Когда сумма кредита превышает $50,00, они округляют ее до ближайших $5,00 (т. е. $50, $55, $60 . ), опять же, чтобы свести к минимуму исчерпание долларовых купюр. Поэтому я использую DECIMAL (7,2) для транзакции.calculated_loan_amount и DECIMAL (5,0) для торговая операция.сумма кредита. Приложение вычисляет сумму кредита до копейки и помещает эту сумму в loan_amount, где она округляется до ближайшего доллара, когда ниже $50 или до ближайшего $5.00, когда больше.

какой выбрать тип в таблице mysql для цены продукта?

Для финасов надёжнее целое число копеек и BIGINT, но иногда надо доли копеек считать и тогда DOUBLE или DECIMAL
А если особо точное требуется, с микродолями копеек, то CHAR и писать свои функции обработки

Выбор типа зависит от назначения данного поля. Если это поле служит для хранения данных, введенных пользователем, то очевидно достаточно numeric с 2 знаками после запятой. Поскольку в реальных финансовых операциях суммы меньше копейки не бывает. Или хранить целое число копеек.

Вообще-то в программах, обрабатывающих финансовые данные следует избегать хранения цен. Лучше хранить количество и сумму. В этом случае все операции выполняются с точностью до копеек. А для устранения погрешности при списании (выбытии) сумм по средней цене используют специальные алгоритмы, зависящие от особенностей учета. Например, вычисление цены исходя из реального остатка с округлением до копеек. А цена — всегда вычисляемая величина. В противном случае, избежать потери точности не получится, поскольку какой бы тип не был выбран, всегда найдется значение, которое нельзя представить точно. Например 1/3.

Типы данных MySQL

Как выполнить цикл в хранимой процедуре MySQL

База данных

В базе данных MySQL существует множество таблиц, которые содержат несколько столбцов или полей для хранения различных типов данных. Очень важно получить правильные знания о поддерживаемых типах данных MySQL, чтобы создать структуру свойства таблицы базы данных. Каждый тип данных MySQL может хранить данные разных размеров. Каждый тип данных может хранить данные в числовом или строковом формате. Размер и использование различных типов данных MySQL для создания таблицы базы данных были описаны в этом руководстве.

Категории типов данных MySQL:

Типы данных MySQL делятся на следующие категории.

  • Строковые данные
  • Числовые данные
  • Двоичные данные больших объектов
  • Данные о дате и времени
  • Пространственные данные
  • JSON-данные

Типы данных, относящиеся к каждой группе, объясняются ниже с примерами.

Строковый тип данных

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

Строковый тип данных Описание
CHAR(n) Он используется для хранения строки фиксированного количества символов. Он может содержать не более 255 символов. Значение аргумента определяет длину строки. Если значение поля CHAR содержит меньше символов, чем значение n, то для оставшихся символов будет добавлено значение пробела.
VARCHAR(n) Он используется для хранения строки переменного количества символов. Он также может содержать не более 255 символов. Значение аргумента определяет длину строки. Он не занимает место впустую, как тип данных CHAR.
TINYTEXT(n) Он работает как тип данных VARCHAR и может хранить до 255 символов.
TEXT(n) Он используется для хранения больших строковых значений, содержащих не более 65 535 символов.
MEDIUMTEXT(n) Он хранит большее текстовое значение, чем тип данных TEXT, который может содержать не более 16 777 215 символов.
LONGTEXT(n) Он хранит более крупные текстовые значения, чем тип данных MEDIOMTEXT, содержащий максимум 4 ГБ или 4 294 967 295 символов.
BINARY(n) Он используется для хранения двоичных символов, и длина этих данных является фиксированной. Он может хранить максимум 255 символов.
VARBINARY(n) Он работает как тип данных BINARY, но его длина не является фиксированной.
ENUM(v1, v2, v3,…,vn) Полная форма ENUM — это перечисление, используемое для выбора одного значения из нескольких значений. Числовой индекс используется для определения строковых значений. Он может иметь максимум 65 535 значений.
SET(v1, v2, v3,…,vn) Он используется для выбора 0 или более значений из списка значений. Он может хранить максимум 64 значения.

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

В поле числового типа данных хранится целое число, такое как идентификатор, номер безопасности и т. д., или дробное число, такое как цена, CGPA и т. д. Различные типы числовых типов данных описаны ниже.

Числовой тип данных Описание
BIT(n) Он используется для хранения битовых значений. Количество битов на значение определяется здесь как n. Он может хранить значения от 1 до 64. Значение по умолчанию — 1.
BOOL/BOOLEAN Он используется для хранения значений True или False. Значение 0 считается значением False, а любое ненулевое число считается значением True.
TINYINT(n) Он используется для хранения целочисленного значения очень маленького размера. Он может хранить значения от -128 до 127 для целых чисел со знаком и от 0 до 255 для целых чисел без знака. n определяет длину числа.
SMALLINT(n) Он используется для хранения небольшого целочисленного значения. Он может хранить значения от -32768 до 32767 для целых чисел со знаком и от 0 до 65535 для целых чисел без знака. n определяет длину числа.
MEDIUMINT(n) Он используется для хранения целочисленного значения среднего размера. Он может хранить значения от -8388608 до 8388607 для целых чисел со знаком и от 0 до 16777215 для целых чисел без знака. n определяет длину числа.
INT(n)/ INTEGER(n) Он используется для хранения целочисленного значения. Он может хранить значения от -2147483648 до 2147483647 для целых чисел со знаком и от 0 до 4294967295 для целых чисел без знака. n определяет длину числа.
BIGINT(n) Он используется для хранения целочисленного значения большого размера. Он может хранить значения от –9223372036854775808 до 9223372036854775807 для целых чисел со знаком и от 0 до 18446744073709551615 для целых чисел без знака. n определяет длину числа.
FLOAT(n, d) Он используется для хранения небольших дробных чисел. Здесь n определяет длину целого числа, а d определяет длину числа после запятой. Для хранения данных требуется 2 байта, а после запятой можно добавить 24 цифры. Значение n по умолчанию равно 10 и равно 2.
DOUBLE(n, d) Он используется для хранения дробных чисел большого размера. Здесь n определяет длину целого числа, а d определяет длину числа после запятой. Для хранения данных требуется 8 байт, а после запятой можно добавить 53 цифры. Значение n по умолчанию равно 16 и равно 4.
DECIMAL(n, d) Он используется для определения дробного числа с фиксированной запятой, которое может хранить большее дробное число, чем FLOAT и DOUBLE. Здесь максимальное значение n может быть 65, а максимальное значение d может быть 30.

Тип данных двоичного большого объекта (BLOB)

Этот тип данных используется для хранения переменного количества двоичных данных. Ниже описаны четыре различных типа типов данных BLOB.

Тип данных BLOB Описание
TINYBLOB Его можно использовать для хранения данных размером не более 255 байт.
BLOB(n) Его можно использовать для хранения данных размером не более 65 535 байт.
MEDIUMBLOB Его можно использовать для хранения данных размером не более 16 777 215 байт.
LONGBLOB Его можно использовать для хранения данных максимум 4 ГБ или 4 294 967 295 байт.

Тип данных дата и время

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

Тип данных даты и времени Описание
DATE Он используется для отображения даты в формате « гггг-мм-дд». Он может хранить значения от «1000-01-01» до «9999-12-31».
TIME Он используется для отображения времени в формате « чч-мм-сс». Он может хранить значения от «-838:59:59» до «838:59:59».
DATETIME Он используется для отображения времени в формате « гггг-мм-дд чч-мм-сс ». Он может хранить значения от «1000-01-01 00:00:00» до «9999-12-31 23:59:59».
YEAR[(2|4)] Он хранит 2 или 4 цифры значения года. Значение года из двух цифр не поддерживается, начиная с версии MySQL 8.0.
TIMESTAMP(м) Он используется для отображения времени в формате «гггг-мм-дд чч-мм-сс». Он может хранить значения от «1970-01-01 00:00:01» UTC до «2038-01-19 03:14:07» UTC.

Тип пространственных данных

Этот тип данных хранит географические и геометрические данные. Ниже описаны различные типы пространственных данных.

Тип пространственных данных Описание
POINT Он используется для хранения значений координат X и Y точки.
MULTIPOINT Он используется для хранения набора нескольких точек.
POLYGON Он используется для представления многосторонней геометрии. 0 или более внутренних границ и одна внешняя граница могут быть определены полигональным типом данных.
MULTIPLYGON Он используется для хранения набора из нескольких полигональных элементов.
LINESTRING Он используется для представления кривой одного или нескольких точечных значений.
MULTILINESTRING Он представляет геометрию с несколькими кривыми, которая содержит набор значений LINESTRING.
GEOMETRY Он используется для хранения точки или совокупности точек пространственных значений любого типа.
GEOMETRYCOLLECTION Он используется для хранения набора из 0 или более значений геометрии.

Тип данных JSON

Тип данных используется для простого хранения документов JSON и доступа к ним. Этот тип данных используется для проверки данных JSON и автоматического предоставления оптимального места для хранения. Если для поля JSON указаны какие-либо недопустимые данные, это приведет к ошибке.

Предпосылки:

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

Выполните следующую команду, чтобы создать базу данных с именем test_db.

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

Использование типов данных MySQL

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

Пример 1: Использование строкового и числового типов данных

Следующий запрос создаст таблицу с пятью полями. Тип данных поля product_id — INT, а первичный ключ будет автоматически увеличиваться. Тип данных поля имени — VARCHAR. Тип данных поля веса — SMALLINT. Тип данных поля модуля — ENUM. Тип данных поля цены — DECIMAL. Выполните следующий запрос, чтобы создать таблицу Products.

CREATE TABLE Products (

product_id int NOT NULL AUTO_INCREMENT ,

name varchar ( 45 ) NOT NULL ,

weight smallint NOT NULL ,

unit enum ( ‘Kg’ , ‘Pound’ , ‘Gram’ ) ,

price decimal ( 6 , 2 ) NOT NULL ,

PRIMARY KEY ( product_id ) ) ;

Выполните следующую команду, чтобы проверить структуру таблицы » Продукты «.

Выполните следующую команду, чтобы проверить структуру табл

Следующий вывод появится после выполнения вышеуказанной команды.

Выполните следующий запрос, чтобы прочитать содержимое таблицы Products.

INSERT INTO `Products` ( `product _ id` , `name` , `weight` , `unit` , `price` ) VALUES ( NULL , ‘Cake’ , ‘500’ , ‘Pound’ , ‘199.99’ ) ;

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

Следующий вывод появится после выполнения вышеуказанной команды.

ю команду, чтобы прочитать содержимое таблицы Produ

Пример 2: Использование типа данных даты и времени

Следующий запрос создаст таблицу с четырьмя полями. Тип данных поля product_id — SMALLINT и первичный ключ. Тип данных поля Manufacturing_date — DATETIME. Тип данных поля expired_date — DATETIME. Тип данных поля entry_date — TIMESTAMP. Выполните следующий запрос, чтобы создать таблицу product_validity.

CREATE TABLE product_validity (

product_id SMALLINT ( 4 ) ,

manufacturing_date datetime NOT NULL ,

expired_date datetime NOT NULL ,

entry_date timestamp ,

PRIMARY KEY ( product_id ) ) ;

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

Следующий вывод появится после выполнения вышеуказанной команды.

е следующую команду, чтобы проверить структуру таблицы pro

Выполните следующий запрос, чтобы прочитать содержимое таблицы product_validity.

INSERT INTO `product _ validity` ( `product _ id` , `manufacturing _ date` , `expired _ date` , `entry _ date` ) VALUES ( ‘1234’ , ‘2022-01-03 17:01:35.000000’ , ‘2022-01-31 22:01:35’ , current_timestamp ( ) ) ;

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

Следующий вывод появится после выполнения вышеуказанной команды.

щую команду, чтобы прочитать содержимое таблицы produ

Пример 3: Использование пространственного типа данных

Следующий запрос создаст таблицу с тремя полями. Тип данных поля id — SMALLINT. Тип данных поля описания — ТЕКСТ. Тип данных геополя — GEOMETRY. Выполните следующий запрос, чтобы создать таблицу geo_table.

CREATE TABLE geo_table ( id smallint ( 3 ) , description text , geo GEOMETRY ) ;

SET @g = ‘POINT(10 3)’ ;

ыполните следующую команду, чтобы проверить структуру т

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

Выполните следующий запрос, чтобы вставить запись в таблицу geo_table.

Выполните следующий запрос, чтобы прочитать содержимое таблицы geo_table.

Пример 4: Использование типа данных JSON

Следующий запрос создаст таблицу данных JSON. Тип данных поля jdata — JSON. Выполните следующий запрос, чтобы создать таблицу jsontable.

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

Выполните следующий запрос, чтобы вставить данные JSON.

Выполните следующий запрос, чтобы прочитать записи из таблицы jsontable.

Заключение

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

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

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