2012-06-21 3 views
4

Каков адекватный тип поля MySQL для весовых (в килограммах) и высоты (метров) данных?Тип поля MySQL для данных о весе и высоте

+0

Вы будете использовать целые числа или только числа с плавающей точкой? Какое максимальное значение вам необходимо сохранить? Будете ли вы хранить отрицательные числа или только положительные? – Wiseguy

+0

Он должен рассматривать плавающие точки, которые я думаю. EX: 80,550 (80 k, 550 gr.) Наибольшие значения для младенцев (10k, 1m). Конечно, все позитивы. LOL –

ответ

6

Это все зависит. Существуют преимущества и недостатки различных числовых типов:

Если вам абсолютно необходимо, чтобы высота/вес были точно определенным числом знаков после запятой и не подвержены проблемам, которые могут иметь числа с плавающей запятой, используйте decimal() (decimal принимает два параметра, количество цифр> 1 и количество цифр < 1, поэтому десятичная (5,2) будет способна хранить числа с точностью до 0,01 и выше 999.99). Исправлена ​​точность математики немного медленнее, и это более дорого, чтобы сохранить их из-за алгоритмов, участвующих в этом. Абсолютно обязательно хранить валютные ценности или любую ценность, которую вы намереваетесь выполнять математику, с использованием валюты как числовой(). Если вы, например, платите людям за фунт или за метр за ребенка, это должно быть числовое().

Если вы согласны с тем, что некоторые числовые значения будут менее точными, чем другие, используйте FLOAT или DOUBLE в зависимости от величины точности и размера номеров, которые вы храните. Плавающие точки - это аппроксимации, основанные на том, как компьютеры делают математику, мы используем десятичные точки, чтобы обозначать из 10 степеней, компьютеры делают математику в base2, они не сопоставимы напрямую, поэтому чтобы обойти эти алгоритмы, были разработаны для случаев, когда 100 % не требуется, но требуется больше скорости, чего не может быть достигнуто путем моделирования ее с помощью целых чисел.

Для получения дополнительной информации:

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html http://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html

+0

Я не считаю, что десятичная (5,2) будет хранить значения размером 99999,99. Первое число - это общее количество цифр. Doc: https://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html «Стандартный SQL требует, чтобы DECIMAL (5,2) мог хранить любое значение с помощью пяти цифры и два десятичных знака, поэтому значения, которые могут быть сохранены в столбце зарплаты, варьируются от -999,99 до 999,99. " –

+1

Спасибо @JRLawhorne, это было исправлено. – hsanders