допустим ли тип данных SQL с плавающей точкой (0)?

#sql

#sql

Вопрос:

У меня создалось впечатление, что минимальное значение для n в float (n) должно быть равно 1.

Я раньше не видел тип данных «float (0)», поэтому мне интересно, допустим ли он.

Ответ №1:

Этот вопрос может быть не очень значимым без указания реализации.

В SQL Server, например, минимальная точность float равна 1.

Где n — количество битов, которые используются для хранения мантиссы числа с плавающей точкой в научной нотации и, следовательно, определяют точность и размер хранилища. Если указано n, это должно быть значение от 1 до 53. Значение n по умолчанию равно 53.

С другой стороны, в MySQL float(0) допустимый синтаксис, но он звучит не очень осмысленно. Из спецификации:

MySQL также поддерживает эту необязательную спецификацию точности, но значение точности используется только для определения размера хранилища. Точность от 0 до 23 приводит к четырехбайтовому столбцу с плавающей точкой одинарной точности. Точность от 24 до 53 приводит к получению двойного столбца с двойной точностью в восемь байт.

У Oracle есть тип данных с плавающей точкой, но, похоже, это просто псевдоним для NUMBER, а его минимальная точность равна 1:

Подтип числового типа данных, имеющий точность p. Значение с плавающей точкой представлено внутренне как число. Точность p может варьироваться от 1 до 126 двоичных разрядов.Для значения с плавающей точкой требуется от 1 до 22 байт.

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

Комментарии:

1. потрясающее объяснение. Я проверил, какая реализация SQL будет использоваться на стороне сервера, и это MySQL. Клиент будет реализовывать SQLite, и я полагаю, что в этом случае тип данных преобразуется в REAL и автоматически получит 8 байт для размера хранилища.

2. Если значение требует от 1 до 22 байт, то диапазон должен составлять от 1 до 176 двоичных цифр.

3. Это хорошее наблюдение… Однако вам придется обсудить это с разработчиками веб-сайта, с которого я скопировал цитату. 🙂

Ответ №2:

это недопустимо, потому что вам нужно объявить размер типа данных. Очевидно, что не может быть равен нулю.

Ответ №3:

И Oracle, и MS SQL утверждают, что минимальное значение для float точности равно 1.

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

Ответ №4:

В соответствии с этим:

http://msdn.microsoft.com/en-us/library/ms173773.aspx

Он недопустим, по крайней мере, на SQL Server. 0 будет представлять нулевые биты, и трудно втиснуть данные во что-то, что имеет нулевое пространство для хранения.