|
Программирование >> Программный интерфейс приложений
Для данньгх с плавающей точкой определяются максимальный размер отображения м символов (включая d символов его дробной части). Значение параметра м лежит в пределах от 1 до 255. Значение другого параметра - d лежит в пределах от О до 30. Оно не должно превыщать м-2. (Читателям, знакомым с концепциями ODBC, можно сказать, что в терминах ODBC м отражает точность , а d - масштаб .) Если для типов double и float эти параметры можно не упоминать, то для типа decimal он обязателен. Для типов double и float допустимы значения по умолчанию. Следующий оператор демонстрирует значения по умолчанию м и d для цифровых типов данных (decimal не включен, так как параметры м и d для него обязательны). CREATE TABLE my table itiny TINYINT, itiny u TINYINT UNSIGNED, Ismail SMALLINT, small u SMALLINT UNSIGNED, imedium MEDIUMINT, imedium u MEDIUMINT UNSIGNED, ireg INT, ireg u INT UNSIGNED, ibig BIGINT, ibig u BIGINT UNSIGNED, fp single FLOAT, fp double DOUBLE, Команда describe mytable возвратит следующий результат. +----------- I Field +----------- itiny itiny u Ismail small u imedium imedium u ireg ireg u ibig ibig u fp single fp double Type tinymt (4) tinyintO) unsigned smallint(6) smallint(5) unsigned mediumint(9) mediumint(8) unsigned int(ll) intdO) unsigned bigint(20) bigint{20) unsigned float(10,2) double(16,4) Очевидно, что любой тип цифровых данных имеет определенный допустимый диапазон значений. При вводе значения, выходящего за пределы, СУБД MySQL усекает значение до ближайшего значения, лежащего внутри диапазона, и возвращает полученный результат. Усечения не возникает при выполнении операции выборки. Здесь нужно понимать, что усечение значения возникает из-за нарушения диапазона типа столбца, а не из-за нарушения размера отображаемых значений. Так, столбец типа smallint (3) имеет длину отображаемых значений, равную 3, а диапазон значений от -32768 до 32676. Значение 12345 будет шире дли- Распечатка этого запроса возвращает значение длиной 21 для типа BIGINT для версии MySQL выше 3.23. нь[ отображения, но оно попадает в диапазон значений столбца этого типа. Поэтому добавление такого числа будет произведено без усечения. Значение 99999 выходит за пределы допустимого диапазона, поэтому при добавлении оно будет усечено до 32767. Что касается столбцов с вещественными значениями, то они округляются до десятых, указанггых в их спецификации. Присвоение значения 1.23456 столбцу типа float (8,1) даст 1.2. При записи аналогичного значения в столбце типа float {8, 4) получим 1.2346. Это значит, что при объявлении размерности столбцов всегда необходимо принимать во внимание размерность значений, которые будут там храниться. Поэтому, если необходимо обеспечить точность до тысячных, не следует объявлять только две цифры после запятой. Существенным нововведением, сделанным в версии 3.23 СУБД MySQL, можно назвать поведение типов данных float (8) и float (4). Теперь оба типа являются типами одинарной точности (single precision) (4-байта) и двойной точности (double precision) (8-байт), которые сохраняются в том виде, в котором заданы, не взирая на ограничения, накладываемые аппаратными средствами. Тип decimal отличается от типов double и float тем, что в действительности значения типа decimal хранятся в виде строк. Максимальный диапазон значений типа decimal аналогичен значениям типа double, но диапазон эффективных значений определяется величинами м и d. Увеличивая значение м при постоянном d, мы увеличиваем диапазон значений. Это хорощо проиллюстрировано в табл. 2.7. Однако, увеличивая значение d при постоянном м, мы уменьщаем диапазон значений (несмотря на то, что точность при этом увеличивается). Эта ситуация моделируется в последних трех строках табл. 2.7. Таблица 2.7. Зависимость диапазона значений типа decimal (m,d) от значений м и d Спецификация типа Диапазон (для версии < 3.23) Диапазон (для версии >- 3.23)
Диапазон типа decimal зависит от версии СУБД MySQL. В версиях, предшествующих версии 3.23, столбцы типа decimal (м, d) хранятся в м байт на значение, плюс знак (при необходимости), причем десятичная точка тоже включена в эти м байт. Таким образом, тип decimal (5,2) имеет диапазон от ~9.99 до 99.99, так как они занимают все отведенные 5 символов. в СУБД MySQL версии 3.23 тип decimal обрабатываются строго в соответствии со спецификацией ANSL которая определяет тип decimal (M,D) как тип, который должен быть способен представлять любое значение с м цифрами всего и d цифрами после запятой. Например, спецификация decimal (5, 2) воспринимает числа, лежащие в диапазоне от -999.99 до 999.99. При этом должны храниться также символ знака и десятичная точка. Для этого потребуется м+2 байт, и для хранения самого длинного значения (-999.99) потребуется 7 байт. Если кратко, диапазон значений типа decimal (m,D) в СУБД MySQL 3.23 эквивалентен типу decimal (м+2, d) ранних версий. Во всех версиях СУБД MySQL d равное О для столбца типа decimal означает, что десятичная точка не хранится. В результате этого диапазон хранимых величин увеличивается на порядок за счет байта, используемого для хранения десятичной точки. Атрибуты цифровых ТИПОВ столбцов Цифровые типы данных можно объявить с параметром zerofill. Этот параметр указывает на то, что значения столбца дополняются ведущими нулями. Это может пригодиться в том случае, если надо убедиться, что столбцы заполняются правильно. CREATE TABLE ray table(my zerofill INT(5) ZEROFILL) INSERT INTO my table VALUES(1), (100), (1000), (1000000) SELECT my zerofill FROM my table Результат работы оператора select будет таким. +-------------+ I ray zerofill I +-------------+ I 00001 I I 00100 I I 10000 I I 1000000 I +-------------+ Обратите внимание на то, что €сш длина значения превыщает длину, объявленную при создании таблицы, отображается все значение. AUTO INCREMENT. Этот атрибут указывается при необходимости автоматического создания уникальных, последовательных кодов. Начальное значение равно 1 с автоматическим приращением L При добавлении новой строки с пустым значением, СУБД MySQL добавляет значение на единицу больще максимального значения, уже существующего в этом столбце. Таблица может иметь не более одного столбца с параметром auto increment. Столбец, имеющий параметр auto increment, должен быть объявлен как not null и проиндексирован как primary key или как unique.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.254
При копировании материалов приветствуются ссылки. |