#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 будет представлять нулевые биты, и трудно втиснуть данные во что-то, что имеет нулевое пространство для хранения.