Какое лучшее определение поля для хранения десятичного числа .NET в MySQL? - PullRequest
2 голосов
/ 08 сентября 2011

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

Я планирую использовать Dapper в качестве облегченного ORM.

1 Ответ

6 голосов
/ 08 сентября 2011

. Десятичный .net может быть разных типов данных под капотом.

.net formats                                  MySQL
----------------------------------------------------
Decimal(Double)                              Float
Decimal(Int32)                               DECIMAL
Decimal(Int32())                             DECIMAL
Decimal(Int64)                               DECIMAL
Decimal(Single)                              DECIMAL
Decimal(UInt32)                              DECIMAL
Decimal(UInt64)                              DECIMAL
Decimal(Int32, Int32, Int32, Boolean, Byte)  DECIMAL
//This is really a UINT96.  

Внимание
Обратите внимание, что, по словам Джона Скита, decimal может быть объявлено множеством способов, но всегда будет FLOAT под капотом, со всеми ошибками округления, которые приносят, вы были предупреждены.
См .: Десятичный эквивалент SQL в .NET

MySQL DECIMAL занимает больше места, если вы назначите ему большую точность.

Из руководства: http://dev.mysql.com/doc/refman/5.5/en/precision-math-decimal-changes.html

Значения для столбцов DECIMAL в MySQL 5.5 хранятся в двоичном формате, который упаковывает девять десятичных цифр в 4 байта.

Наибольшее количество цифр - 65, деленное на 9 = 8 байтов, INT128.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...