Подробно о типах данных. Smallint тип данных


Типы полей в MySQL

MySQL поддерживает три группы типов полей: числовые, дата и время, строковые (символьные).

Тип Применение Размер
TINYINT целые числа самой маленькой разрядности Диапазон чисел со знаком: –128 … 127, без знака(unsigned) – 0 … 255
SMALLINT целые числа маленькой разрядности Диапазон чисел со знаком: –32768 … 32767, без знака(unsigned) – 0 … 65535
MEDIUMINT целые числа средней разрядности Диапазон чисел со знаком: –8388608 … 8388607, без знака(unsigned) – 0 … 16777215
INT или INTEGER целые числа обыкновенной разрядности Диапазон чисел со знаком: -2147483648 … 2147483647, без знака(unsigned) – 0 … 4294967295
BIGINT целые числа большой разрядности Диапазон чисел со знаком: -9223372036854775808 … 9223372036854775807, без знака(unsigned) – 0 … 18446744073709551615
FLOAT числа с плавающей запятой (одинарной точности) Диапазон от –3.402823466E+38 до –1.175494351E-38 и от 1.175494351E-38 до 3.402823466E+38
DOUBLE, REAL числа с плавающей запятой (двойной точности) Диапазон от -1.7976931348623157E+308 до -2.2250738585072014E-308 и от 2.2250738585072014E-308 до 1.7976931348623157E+308
DATE дата Диапазон от ‘1000-01-01′ до ‘9999-12-31′, отображается в виде ‘YYYY-MM-DD’
DATETIME комбинация даты и времени Диапазон от ‘1000-01-01 00:00:00′ до ‘9999-12-31 23:59:59′, отображается в виде ‘YYYY-MM-DD HH:MM:SS’
timestamp временная отметка Диапазон от ‘1970-01-01 00:00:00′ до 2037 года, отображается в виде YYYYMMDDHHMMSS или YYMMDDHHMMSS или YYYYMMDD или YYMMDD
TIME время Диапазон от ‘-838:59:59 до ‘838:59:59′, отображается в виде ‘HH:MM:SS’
YEAR год (2-х или 4-х циферное представление) Диапазон от 1901 до 2155 (для 4-х циферного представления) и 1970-2069 (70-69, для 2-х циферного представление), отображается в виде ‘YYYY’
CHAR строка фиксированной длины Диапазон от 1 до 255 символов, пробелы по краям обрезаются при получении значения, заполняется пробелом до заданной длины (если символов меньше, чем заданная длина), сортировка и сравнение значений регистро-независимое
VARCHAR строка изменяющийся длины Диапазон от 1 до 255 символов, пробелы по краям обрезаются при сохранении, сортировка и сравнение значений регистро-независимое
TINYBLOB, TINYTEXT столбец типа BLOB или TEXT, максимальная длина 255 символов
BLOB, TEXT столбец типа BLOB или TEXT, максимальная длина 65535 символов
MEDIUMBLOB, MEDIUMTEXT столбец типа BLOB или TEXT, максимальная длина 16777215 символов
LONGBLOB, LONGTEXT столбец типа BLOB или TEXT, максимальная длина 4294967295 символов
ENUM перечисление строковый объект, может иметь только одно значение из списка, максимальное количество уникальных элементов – 65535
SET множество строковый объект, может иметь 0 или больше значений из списка, максимальное количество элементов – 64

Требования к памяти для числовых типов

Тип столбца Требуемая память
TINYINT 1 byte
SMALLINT 2 байта
MEDIUMINT 3 байта
INT 4 байта
INTEGER 4 байта
BIGINT 8 байтов
FLOAT(X) 4, если X <= 24 или 8, если 25 <= X <= 53
FLOAT 4 байта
DOUBLE 8 байтов
DOUBLE PRECISION 8 байтов
REAL 8 байтов
DECIMAL(M,D) M+2 байт, если D > 0, M+1 байт, если D = 0 (D+2, если M < D)
NUMERIC(M,D) M+2 байт, если D > 0, M+1 байт, если D = 0 (D+2, если M < D)

Требования к памяти для типов даты и времени

Тип столбца Требуемая память
DATE 3 байта
DATETIME
8 байтов
TIMESTAMP 4 байта
TIME 3 байта
YEAR 1 байт

Требования к памяти для символьных типов

Тип столбца Требуемая память
CHAR(M) M байт, 1 <= M <= 255
VARCHAR(M) L+1 байт, где L <= M и 1 <= M <= 255
TINYBLOB, TINYTEXT L+1 байт, где L < 2^8
BLOB, TEXT L+2 байт, где L < 2^16
MEDIUMBLOB, MEDIUMTEXT L+3 байт, где L < 2^24
LONGBLOB, LONGTEXT L+4 байт, где L < 2^32
ENUM('value1','value2',...) 1 или 2 байт, в зависимости от количества перечисляемых величин (максимум 65535)
SET('value1','value2',...) 1, 2, 3, 4 или 8 байт, в зависимости от количества элементов множества (максимум 64)

VARCHAR, BLOB и TEXT являются типами данных с переменной длиной строки, для таких типов требования к памяти в общем случае определяются реальным размером величин в столбце (представлен символом L в приведенной выше таблице), а не максимально возможным для данного типа размером. Например, столбец VARCHAR(10) может содержать строку с максимальной длиной 10 символов. Реально требуемый объем памяти равен длине строки (L) плюс 1 байт для записи длины строки. Для строки 'abcd' L равно 4 и требуемый объем памяти равен 5 байтов.

В случае типов данных BLOB и TEXT требуется 1, 2, 3 или 4 байта для записи длины значения данного столбца в зависимости от максимально возможной длины для данного типа.

Если таблица включает в себя столбец какого-либо типа с переменной длиной строки, то формат записи также будет переменной длины. Следует учитывать, что при создании таблицы MySQL может при определенных условиях преобразовать тип столбца с переменной длиной в тип с постоянной длиной строки или наоборот.

Размер объекта ENUM определяется количеством различных перечисляемых величин. Один байт используется для перечисления до 255 возможных величин. Используя два байта, можно перечислить до 65535 величин. 

Размер объекта SET определяется количеством различных элементов множества. Если это количество равно N, то размер объекта вычисляется по формуле (N+7)/8 и полученное число округляется до 1, 2, 3, 4 или 8 байтов. Множество SET может иметь максимум 64 элемента.

yapro.ru

Типы данных

Эта документация перемещена в архив и не поддерживается.

Каждый столбец в таблице из базы данных Microsoft SQL Server Compact 4.0 поддерживает набор типов данных, в котором указывается тип данных, которые может содержать столбец.

Примечание

У MicrosoftSQL Server и SQL Server Compact 4.0 могут быть небольшие отличия в способе поддержки типов данных в случаях, когда исполнение функции приводит к переполнению данных или к их потере.

SQL Server Compact 4.0 поддерживает следующие типы данных.

Тип данных

Описание

bigint

Целочисленные данные (целые числа) от –2^63 (–9 223 372 036 854 775 808) до 2^63–1 (9 223 372 036 854 775 807). Размер хранения составляет 8 байт.

integer

Целочисленные данные (целые числа) от –2^31 (–2 147 483 648) до 2^31–1 (2 147 483 647).

Размер хранения составляет 4 байта.

smallint

Целочисленные данные от –32 768 до 32 767. Размер хранения составляет 2 байта.

tinyint

Целочисленные данные от 0 до 255. Размер занимаемой памяти — 1 байт.

bit

Целочисленные данные со значением 1 либо 0.

Размер занимаемой памяти — 1 бит.

numeric (p, s)

Synonyms:

decimal(p,s) and dec (p,s)

Данные с фиксированной точностью и численным масштабом от –10^38+1 до 10^38–1. Переменная p указывает точность и может принимать значения от 1 до 38. Переменная s указывает масштаб, она может принимать значения от 0 до p.

Размер хранения составляет 19 байт.

money

Значения денежных данных от (–2^63/10000) (–922 337 203 685 477,5808) до 2^63–1 (922 337 203 685 477,5807) с точностью до десятитысячной доли денежной единицы. Размер хранения составляет 8 байт.

float

Числовые данные с плавающей запятой от –1,79E +308 до 1,79E+308

Размер хранения составляет 8 байт.

real

Числовые данные с плавающей точностью от –3.40E+38 до 3.40E+38.

Размер хранения составляет 4 байта.

datetime

Данные даты и времени от 1 января 1753 г. по 31 декабря 9999 г. с точностью до одной трехсотой секунды или 3,33 миллисекунды. Значения округляются с шагом 0,000, 0,003 или 0,007 миллисекунд.

Хранятся как два 4-байтовых целочисленных значения. В первых 4 байтах хранится количество дней до или после base date, 1 января 1900 г. Базовая дата — это эталонная дата системы. Значения для datetime ранее 1 января 1753 г. запрещены. В других 4 байтах хранится время дня в миллисекундах после полуночи. Допустимый диапазон секунд — от 0 до 59.

Формат Пример

ГГГГ-ММ-ДД чч:мм:сс 1947/08/15 03:33:20

ММ-ДД-ГГГГ чч:мм:сс 04/15/1947 03:33:20

ДД ГГГГ ММ чч:мм:сс 15 янв 1947 03:33:20

ДД ММММ ГГГГ ч:мм:сс 15 января 1947 03:33:20

national character(n)

Synonym:nchar(n)

Данные Юникод постоянной длины с максимальной длиной 4 000 символов. Стандартная длина = 1. Размер занимаемой памяти в байтах — количество введенных символов, умноженное на два.

national character varying(n)

Synonym:nvarchar(n)

Данные Юникод переменной длины с максимальной длиной от 1 до 4 000 символов. Стандартная длина = 1. Размер занимаемой памяти в байтах — количество введенных символов, умноженное на два.

ntext¹

Данные Юникод переменной длины с максимальной длиной (2^30–2)/2 (536,870,911) символов. Размер занимаемой памяти в байтах — количество введенных символов, умноженное на два.

Примечание

В строковых функциях ntext более не поддерживается.

nchar

Данные в Юникоде постоянной длины n знаков, значение n должно быть в диапазоне от 1 до 4 000. Занимаемый размер — 2n байт.

binary(n)

Двоичные данные Юникод постоянной длины с максимальной длиной 8 000 байт. Стандартная длина = 1.

Размер занимаемой памяти не изменяется, его длина в байтах заявлена в типе.

varbinary(n)

Двоичные данные Юникод переменной длины с максимальной длиной 8 000 байт. Стандартная длина = 1.

Размер занимаемой памяти изменяется. Он равен длине значения в байтах.

image¹

Двоичные данные Юникод переменной длины с максимальной длиной 2^30–1 (1 073 741 823) байт.

Хранилище данных — это длина значения в байтах.

uniqueidentifier

Глобальный уникальный идентификатор (GUID). Размер занимаемой памяти — 16 байт.

IDENTITY [(s, i)]

Это свойство столбца данных, где содержатся данные неопределенного типа.

Для столбцов удостоверений могут быть использованы только столбцы целочисленных данных. В таблице может содержаться только один столбец идентификаторов. Если указать начальное значение и значение шага, столбец будет невозможно обновить.

s (seed) = начальное значение

i(increment) = значение шага

ROWGUIDCOL

Это свойство столбца данных, где содержатся данные неопределенного типа. Это столбец таблицы, который определен с помощью типа данных uniqueidentifier. В таблице может содержаться только один столбец ROWGUIDCOL.

Timestamp/rowversion

Это автоматически создаваемый уникальный двоичный номер.

Размер занимаемой памяти — 8 байт.

¹В SQL Server Compact 4.0 данные Ntext и изображения сохраняются на новой странице данных, когда число байтов превышает 256. Это может сказаться на степени компактности базы данных, поскольку базы данных SQL Server Compact 4.0 сжимаются по страницам, а не по байтам.

Дополнительные сведения о типах данных SQL Server, требующих преобразования в SQL Server Compact 4.0, см. в разделе Различия между SQL Server Compact и SQL Server.

msdn.microsoft.com

Урок 2. Типы полей MySQL

1. Типы полей 2. Часто используемые типы полей MySQL

В предыдущем уроке мы рассмотрели основные составляющие MySQL. Напомню, в базу данных входят таблицы, которые состоят из записей, а записи, в свою очередь, состоят из полей. Поле подразумевает два атрибута - имя и тип. Имя может быть любое, удобное Вам, а состоять должно из латинских букв и нижнего подчёркивания.

Имя: id, name, age, sexТипы: INT, VARCHAR, INT, VARCHAR Поля могут быть разного типа - с числами (разных величин), текстом, датой и так далее. Логично, если под определённые данные будет точно выбран тип поля.

Тип поля может быть:

1. Целым2. Вещественным3. Строковым4. Бинарным5. Дата и время6. Перечисления и множества

Типы полей мы примерно сгруппировали. Теперь давайте приступим к знакомству с ними.

Типы полей в MySQL

Целочисленные типы данных

TINYINT - тип целых чисел. Диапазон значений от -127 до 128 (если может быть отрицательным), либо 0 до 255 (если не может быть отрицательным).

SMALLINT - тип целых чисел, В отличие от TINYINT диапазон значений значительно больше: -32 768 до 32 767 (если значение может быть отрицательным), либо от 0 до 65 535.

MEDIUMINT - тип целых чисел, однако диапазон значений ещё больше: от -8 388 608 до 8 388 607 (если возможны отрицательные), либо от 0 до 16 777 215.

INT - тип целых чисел. Самый распространённый тип данных. Диапазон: от -2 147 483 648 до 2 147 483 647, либо от 0 до 4 294 967 295.

BIGINT - ещё один тип целых чисел, с самым широким диапазоном значений. Используется редко, так как подобные масштабы значений бывают задействованы крайне редко. От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, либо от 0 до 18 446 744 073 709 551 615.

Вещественные числа

FLOAT - вещественные числа. Точность одинарная. Число знаков после запятой может составлять не более 24-х. Диапазон значений: от -3,402823466E+38 до -1,175494351E-38, 0, и от 1,175494351E-38 до 3,402823466E+38.

DOUBLE - вещественный тип данных. Похож на FLOAT, но знаков после запятой больше в два раза. Количество знаков после запятой может составлять до 53-х. Допустимые значения: от -1,7976931348623157E+308 до -2,2250738585072014E-308, 0, и от 2,2250738585072014E-308 до 1,7976931348623157E+308.

DECIMAL - вещественный тип данных, хранится в виде строки. Используется редко. При отсутствии знаков - и . диапазон значений такой же как у DOUBLE.

Строки

TEXT (BLOB) - стандартный строковый тип данных. Максимальная длина 65 535 символов. Самый используемый вариант при хранении текстовых данных.

TINYTEXT (TINYBLOB) - строковый тип. Текст с длиной от 0 до 255 символов.

MEDIUMTEXT (MEDIUMBLOB) - строковый тип. Текст с длиной от 0 до 16 777 215 символов.

LONGTEXT (LONGBLOB) - строковый тип. Текст с длиной от 0 до 4 294 967 295 символов.

VARCHAR - ещё один строковый тип данных, причём строкой переменной длины от 0 до 255 символов. Чаще всего используется для сохранения переменных с логином, паролем и прочими пользовательскими данными.

CHAR - строковый тип данных. Длина фиксированная (независимо от количества переданных символов). Диапазон составляет от 0 до 255 символов. При передаче данных меньше 255 символов в конце к данным дописываются пробелы, чтобы длина строки достигла заданного размера.

Бинарные типы данных

TINYBLOB - бинарный тип данных. Максимум 255 символов.

BLOB - бинарный тип. Максимум 65535 символов.

MEDIUMBLOB - бинарный тип данных. Максимум 16 777 215 символов.

LONGBLOB - бинарный тип данных. Максимум 4 294 967 295 символов.

Дата и время

DATE - тип данных, хранящий дату. Формат следующий: YYYY-MM-DD (год, месяц, день). Например, такое значение будет удовлетворять этому полю: 2011-01-02.

DATETIME - тип данных, хранящий дату и время. Формат следующий: YYYY-MM-DD HH:MM:SS (год-месяц-день час-минута-секунда). Например: 2011-01-21 09:41:22

TIMESTAMP - тип данных, хранящий дату и время. Имеет следующие форматы: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, YYMMDD.

TIME - тип данных, хранящий время. Формат: HH:MM:SS. Например: 09:21:55.

YEAR - тип данных, хранящий дату (год). Форматы: YY, YYYY.

Списки значений

ENUM - тип данных, содержащий список значений. Значение данного типа должно быть из списка допустимых строковых значений (аналог radiobutton). Максимальное количество значений 65535.

SET - тип данных, содержащий список значений. В отличие от ENUM может быть выбрано несколько значений (аналог checkbox). Максимальное количество значений, хранимых в SET - 64.

Атрибуты полей

Атрибут AUTO_INCREMENT - генерирует новое порядковое значение для строк. Атрибут UNSIGNED - данное числовое значение будет неотрицательным.

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

Часто используемые типы полей MySQL

INT - по праву самый распространённый тип. Практически в каждой таблице есть поле ID (уникального идентификатора), автоматически назначаемый для каждой записи.

VARCHAR - популярен для сохранения данных пользователей - логинов, паролей, имён, фамилий и других подобных полей.

TINYINT - используется для активации пользователей (например, 0 не активирован, 1 - активирован), статей, объявлений и прочих данных. Также используется в других ситуациях, где используются так называемые флаги. Например, 1 - Гость, 2 - Зарегистрированный, 3 - Модератор, 4 - Администратор.

TEXT - текстовый тип данных. Очень часто используется для хранения статей, сообщений и прочих записей.

DATETIME - у каждого сообщения, статьи, записи, регистрации пользователя, в конце концов, есть время создания, последнего редактирования и так далее. Для это часто используют данный тип.

ENUM - используется в сочетании с другими типами данных. Для словесного описания какого-либо функционала или сохранения версии ресурса на другом языке (английский и тд). Меню - Menu и так далее.

Спасибо за внимание!

tradebenefit.ru

3. Типы данных, используемые в sql-сервере

Одним из основных моментов в процессе создания таблиц является определение типов данных для ее полей. Тип данных поля таблицы определяет тип информации, которая будет разме­щаться в этом поле. SQL-сервер поддерживает большое число различных типов данных: текстовые, числовые, двоичные и т.д.

Если имеется необходимость в размещении, каких-либо специфических данных в поле таблицы, то в этом случае можно воспользоваться так называемыми пользовательскими типами данных.

Рассмотрим подробней типы данных, используемые в SQL-сервере. Обратите внимание на колонку L P S представлен­ных ниже таблиц. Здесь отображается возможность корректи­ровки (■ - кор­ректировка допустима, □ - корректировка недопус­тима) значений Length, Precision и Scale в дизайнере таблиц ути­литы SQL Server Enterprise Manager. В таблице 8 представлены текстовые типы данных SQL сервер.

Таблица 8

Текстовые типы данных

Название

LPS

Описание

Char

■□□

Текстовый тип данных, при использо­вании ко­торого задается его размер­ность, причем для каждого символа выделяется один байт. Раз­мерность: до 8000 символов.

Nchar

■□□

Аналогичен типу данных Char, за ис­ключе­нием размерности. Размерность: до 4000 символов.

Varchar

■□□

Используется для хранения текстовой инфор­мации переменной длины. Размерность: до 8000 симво­лов.

Nvarchar

■□□

Аналогичен типу данных Varchar, за исключе­нием размерно­сти. Размерность, до 4000 символов.

При вводе данных текстового типа, в операторах языка SQL используются одинарные или двойные кавычки. В таб­лице 8 представлены типы данных, основным отличием кото­рых является их размерность. Так, например, после создания поля типа char(15) или nchar(15) при добавлении в него ин­формации будут автоматически добавляться несколько дополни­тельных пробелов для доведения размерности вводимых данных до 15 символов.

При этом для каждого символа SQL-сервер отводит один байт. C другой стороны, использование типов данных var­char(15) или nvarchar(15) позволяет определить только макси­мальную размерность поля, при внесении информации в эти поля будут записываться только данные без каких-либо дополнитель­ных символов; однако, при превышении этой размерности, вся лишняя информация будет утеряна. При указании типа данных для определенного поля с помощью ди­зайнера таблиц утилиты SQL Server Enterprise Manager размерность представленных тек­стовых типов данных указывается в колонке Length напротив выбранного поля.

Числовые типы данных SQL-сервер описаны в таблице 9.

Таблица 9

Числовые типы данных:

Название

LPS

Описание

Int

□□□

Тип данных, позволяющий хранить положительные и отрицательные целые числа, занимающий в памяти 4 байта. Диапазон: от -231до +231.

Smallint

□□□

Занимает в памяти 2 байта. Аналогичен типу данных Int, за исключением диа­пазона значений. Диапазон от -32768 до 32767

Tinyint

□□□

Тип данных, используемый для хране­ния положитель­ных целых чисел, зани­мающий в памяти 1 байт. Диа­пазон: от 0 до 255.

Real

□□□

Тип данных, используемый для хране­ния положитель­ных и отрицательных чисел с плавающей точкой с точностью до 7 цифр; занимает в памяти 4 байта. Диа­пазон от -3.4Е-38 до +3,4Е+38.

Float

□□□

Тип данных, используемый для хране­ния положитель­ных и отрицательных чисел с плавающей точкой с точностью до 15 цифр; занимает в памяти до 8 байт. Диапазон от -1,7Е-308 до -1,7Е+308.

Decimal

□■■

Тип данных, позволяющий определять точно интервал значений вводимых десятичных чисел, занимает в па­мяти от 2 до 17 байт. Диапазон от -10Е-38 до +10Е+38.

Numeric

□■■

Аналогичен типу данных Decimal.

Money

□□□

Тип данных, используемый для хранения денежных значений, занимающий в памяти до 8 байт. Диапазон от -922 337 203 685 477,58081 до +922 337 203 685 477.5807.

Smallmoney

□□□

Аналогичен типу данных Money, занимает в памяти до 4 байт. Диапазон от -214,748.3648 до 14,748.3647.

Числовые типы данных включают две группы типов дан­ных: используемые для хранения 1) целых чисел и 2) чисел с пла­вающей точкой. Отличие между типами Int, Smallmoney и Ti­nyint заключается в диапазонах используемых значений. Для хранения чисел с плавающей точкой используют типы данных Real и Float. Отличием в данном случае является формат точно­сти и диапазон представления чисел.

Типы данных Decimal и Numeric позволяют самостоя­тельно определить формат точности числа с плавающей точкой. В этом случае, при корректировке параметров Precision и Scale в диалоговом окне дизайнера таблиц утилиты SQL Server Enterprise Manager, изменяется формат представления этих чисел и, соот­ветственно, объём памяти, занимаемый данными этого типа. При этом с помощью параметра Precision указывается максимальное количество цифр вводимых данных этого типа. Изменение пара­метра Length в зависимости от Precision при указании типа дан­ных Decimal и Numeric описано в таблице 10.

Таблица 10

Precision, цифр

Length, байт

1 -9

5

10-19

9

20-28

13

29-38

17

В SQL-сервере имеются два типа данных, ориентирован­ных на хранение денежных значений. Тип данных Money физи­чески записывает информацию в виде двух четырехбайтовых значений - отдельно для целой и дробной части. Данные этого типа сохраняются с точностью до десятичных долей денежной единицы. Для хранения денежных значений чаще используется тип данных Smallmoney. Его структура аналогична структуре Money, однако физически данные этого типа сохраняются в виде двух двухбай­товых значений, что уменьшает занимаемый ими объем в памяти компьютера.

Типы данных даты и времени приведены в таблице 11.

Таблица 11

studfiles.net

Подробно о типах данных | SQL

Правильный выбор типов данных — важный этап проектирования таблиц

В следующих выпусках рубрики «T-SQL для начинающих» будет рассказано о применении синтаксиса T-SQL для построения таблиц. Но прежде чем начинать строить таблицы, необходимо поговорить о типах данных. Для каждого столбца таблицы должен быть определен некоторый тип данных, например, целые (integer) или символьные (character). Это позволяет системе в последующем контролировать данные, которые будут помещаться в этот столбец. В предлагаемой статье автор рассматривает предусмотренные в системе типы данных и рассказывает о том, как создавать собственные типы данных. Подобные дополнительные типы данных следует создать до того как начнется построение таблиц, ведь при создании таблиц могут понадобиться ссылки на эти типы данных. Определяемые пользователями типы данных позволят существенно усилить контроль над данными и повысить их целостность, особенно в проектах, в которых с базами данных параллельно работают несколько разработчиков.

Столбцам необходимы типы данных

При создании таблицы необходимо указать тип данных для каждого столбца. Любые данные, помещаемые в столбец, должны отвечать этому типу данных. В некоторых случаях следует указывать и допустимую длину данных в столбце. В листинге 1 приведен оператор SQL, который создает таблицу авторов Authors в базе данных публикаций Pubs, спользуя только предусмотренные в системе типы данных.

Большинство столбцов в этой таблице являются текстовыми полями. Номер телефона, обозначение штата и почтовый индекс всегда имеют постоянную длину, поэтому соответствующие им столбцы phone, state и ZIP удобнее объявить символьными (char). Имя автора, его адрес и город, где он живет, могут различаться по длине, поэтому для них предпочтительнее использовать тип символьных данных переменной длины (varchar). Столбец contract с информацией о наличии контракта с автором, в котором данные представляются в форме да/нет, целесообразно отнести к двоичному типу данных bit, у которого имеется два возможных значения — 0 и 1. Теперь остановимся подробнее на системных типах данных.

Типы данных, предусмотренные в системе

В версии SQL Server 6.0 определено 19 типов данных, а в версии SQL Server 7.0 добавлено еще 4 типа для удобства работы с закодированными с помощью Unicode данными, а также для поддержки приложений, основанных на использовании хранилищ данных. Каждый тип данных имеет ряд разновидностей, отличающихся возможным набором значений. Знание этих значений облегчит выбор подходящего типа данных.

Символьные данные

Символьные данные типа char предсавляют собой один из наиболее распространенных типов данных. К этому типу относятся такие символьные данные, как имена или адреса. В версии SQL Server 6.5 длина любого столбца с символьными данными ограничивалась 255 знаками. Если же информация оказывалась длиннее, к примеру, если в столбец предполагалось вводить свободный комментарий по поводу контракта, то тогда следовало использовать текстовый тип данных (text). В SQL Server 7.0 это ограничение отменено, так что символьное поле может содержать до 8000 байтов. Верхняя граница обусловлена размером страницы памяти, поскольку ни одна запись не может располагаться в памяти на нескольких страницах. В тех случаях, когда для столбца определен тип данных char, данные следует помещать в одинарных кавычках, как показано в следующем примере:

UPDATE..... SET..... WHERE.....

Как отмечалось в статье «Работа с символьными данными», помещенной в майском номере журнала, можно выбрать символьный тип данных либо фиксированной длины, char, либо переменной длины, varchar. Фиксированный размер оказывается предпочтительным в тех случаях, когда данные имеют одинаковую или сходную длину, например, при вводе идентификатора автора (часто в этом качестве используют индивидуальный номер системы социальной безопасности, что, кстати, является плохим примером для подражания). В большинстве ситуаций применение переменной длины данных не приводит к сколько-нибудь заметному увеличению времени обработки. В то же время фамилия автора может быть очень длинной, так что использование типа varchar оказывается вполне оправданным. Применительно к подавляющему большинству фамилий фиксированная длина поля означает потерю значительного объема памяти, поэтому лучше использовать тип данных varchar. При выборе того или иного типа данных всегда следует искать компромисс с учетом двух аспектов: с одной стороны, потери полезного объема памяти при использовании данных фиксированной длины, а с другой стороны, увеличения времени обработки в случае применения данных переменной длины.

SQL Server 7.0 поддерживает набор символов Unicode. В связи с этим, чтобы воспользоваться всеми преимуществами, предоставляемыми расширенными возможностями Unicode, необходимо было ввести дополнительный тип данных.Если вам захочется использовать символьные данные Unicode, то следует указать тип данных Nchar или, если это информация переменной длины, то Nvarchar. При вводе данных Unicode их следует заключать в одиночные кавычки, причем непосредственно перед ними необходимо поставить заглавную латинскую букву N. Если в рассмотренном ранее примере имя автора отнесено к типу данных Unicode, то предыдущий оператор обновления примет следующий вид:

UPDATE..... SET..... WHERE.....

Ограничение максимальной длины информации при работе с типом данных Unicode составляет 4000 знаков. Это объясняется тем, что для хранения каждого символа Unicode требуется два байта памяти. Поэтому на стандартную страницу памяти размером 8К можно поместить в два раза меньше символов Unicode, чем при использовании обычных символов.

Целые

Базовый тип целых чисел integer охватывает диапазон от -2 147 483 638 до 2 147 483 647. Уменьшенные целые smallint включают числа от -32 768 до 32767. Зачастую, когда точно известно, что диапазон возможных числовых значений данных невелик, лучше применять тип данных smallint. К примеру, в базе данных личной коллекции компакт-дисков при выборе типа данных для первичного ключа целесообразно использовать тип данных smallint. Ведь предположение о том, что число компакт-дисков в такой коллекции превысит 32 676 единиц, кажется неправдоподобным. В этой ситуации не следует для оптимизации памяти использовать тип данных tinyint, поскольку он позволяет обрабатывать только значения от 0 до 255. Такой тип данных можно было бы применить для нумерации депозитных сертификатов, а для коллекции компакт-дисков он может оказаться недостаточным.

Точные числовые данные

Если приложение таково, что необходимо получать из базы данных числовое значение в строго указанном формате, то для этого следует выбрать один из точных числовых типов данных. Существуют два точных числовых типа данных: десятичный (decimal) и числовой (numeric), которые по существу совпадают друг с другом. Для них можно задать требуемые точность p и масштаб s в формате decimal (p,s). Точность представляет собой число значащих символов по обе стороны от десятичной запятой, а масштаб — количество символов справа от нее. Например, число 123,4567 можно хранить в столбце, для которого тип данных задан в виде (7,4). Если число, которое должно быть помещено в столбец с точным числовым типом данных, содержит больше десятичных знаков, чем указано в типе данных, то такое число округляется до требуемой точности. Числовые типы данных могут использовать для хранения значений от 2 до 17 байтов.

Приближенные числовые данные

Некоторые числа нельзя точно представить в десятичном виде с ограниченным числом знаков, например, одну треть или число пи. Для записи таких чисел используются действительный (real) или плавающий (float) типы данных. Данные действительного типа хранятся с точностью от 1 до 7 знаков. Плавающий формат, который иногда называют еще форматом двойной точности, может хранить числа, содержащие от 8 до 15 значащих цифр. Действительный и плавающий типы данных применяются в научных приложениях для хранения чисел, не требующих точного двоичного выражения. Одна-две последние цифры могут не вполне точно сохраняться при преобразованиях в двоичный формат. Поэтому такие числа не следует использовать в операциях точного сравнения, применяемых для формулирования условий оборота WHERE.

Двоичные

Предположим, что в базе данных необходимо хранить двоичную информацию. В этой ситуации имеется выбор между двумя форматами представления: c фиксированной или переменной длиной. Данным фиксированной длины соответствует тип данных binary, а двоичным данным переменной длины соответствует тип данных varbinary.

Денежные

Для представления денежных значений используются два типа данных: денежный (money) и малый денежный (smallmoney). Тип данных денежный применяется для хранения значений от плюс до минус 922 триллионов. Большинство из нас вполне может пользоваться малым денежным типом данных, который перекрывает диапазон значений от -214 748,3648 до +214 748,3647. По существующей договоренности денежный тип данных при хранении имеет четыре десятичных знака после запятой, а для его представления пользователям требуется только два знака . Отметим, что многие финансовые транзакции не используют денежный тип данных. Например, в биржевыех торговых операциях применяются 1/32 доли, для хранения которых необходимо пять десятичных мест.

Даты

В SQL Server и дата и время хранятся в одном столбце, так что если с помощью функции GETDATE() запросить текущую дату, то при этом система сообщит и время. Для дат применяются два типа данных, datetime и smalldatetime. Тип данных smalldatetime охватывает период времени от 1 января 1900 года до 6 июня 2079 года и включает время с точностью до минуты. Такого диапазона достаточно для подавляющего большинства проектов. Тип данных datetime годен для использования до 31 декабря 9999 года (это следует учитывать при решении проблемы 10К года). Начало диапазона этого типа данных датируется 1 января 1753 года. Почему 1753? Это связано с переходом с юлианского на грегорианский календарь. Несмотря на то, что грегорианский календарь был предложен некоторое время назад, процесс его принятия продолжался в течение приблизительно 30 лет. На протяжении этого периода некоторые страны уже приняли грегорианский, а другие еще нет. Поэтому для того, чтобы дата воспринималась однозначно, надо знать географическое положение объекта. Кроме того, год начинался не 1 января, а 1 марта. Поэтому такая дата, как 15 января 1792 года, может интерпретироваться и как середина первого месяца 1492 года, и как середина 11-го месяца 1793 года. Создатели SQL Server решили не рисковать, и поэтому приняли решение не воспринимать даты, относящиеся к периоду времени до начала 1753 года. Следует отметить также, что тип данных datetime показывает тысячные доли секунды, хотя точность гарантируется только до 1/300 части секунды.

Тексты и образы

Для символьных данных длиннее, чем 255 знаков, в SQL Server 6.5 следует применять тип данных текст (text). В SQL Server 7.0 граница применимости этого типа данных отодвигается до 8000 знаков. Для больших двоичных объектов (BLOB), таких как цифровые образы, используется тип данных образ (image). ?анные типа текст или образ не хранятся в строках, поэтому к ним не применимо ограничение на размер страницы памяти. В строках хранятся лишь указатели на страницы базы данных, в которых находится информация. Для обновления этих типов данных необходимы специальные процедуры, которые выходят за рамки рассмотрения настоящей статьи. (Более подробно об этом написано в статье Майкла Оути «Нам не страшен огромный BLOB», опубликованной в апрельском номере журнала.) Здесь необходимо отметить только то, что изменения текстовых данных или образов не фиксируются в журнале, а указатели не обновляются. Изменяются только сами поля, содержащие текст или образ.

Специальные типы данных

Некоторые типы данных трудно отнести к какой-либо категории. Один из таких типов — битовые данные (bit). Это целое число, которое может принимать только два значения — 0 и 1 (в одном байте можно хранить восемь подобных величин). Битовые значения часто применяются в качестве флагов, принимающих значения истина или ложь. Их можно использовать, например, для хранения сведений о том, заключен ли контракт с автором, или принадлежат ли его книги к бестселлерам, или для чего-либо аналогичного. Одно незначительнгое отличие версии SQL Server 7.0 состоит в том, что для столбцов с битовыми данными теперь разрешены и неопределенные значения, в то время как в версии SQL Server 6.5 допустимы были только значения 0 и 1.

Для внутренних целей в SQL Server используется тип данных метка времени (timestamp). Этот тип данных генерирует уникальное значение, которое обновляется каждый раз, когда модифицируется информация в строке таблицы. Метки времени являются внутренними значениями, поддерживаемыми в SQL Server. Они не соответствуют реальным датам и времени.

В SQL Server 7.0 введены два новых типа данных, которые более подробно будут рассмотрены в последующих публикациях. тип данных уникальный идентификатор (uniqueidentifier) позволяет присвоить столбцу уникальное в глобальном масштабе значение. Глобальная уникальность означает неповторимость не только в рамках конкретной базы данных или в пределах одного компьютера, но вообще везде. Этот тип данных играет важную роль при работе с хранилищами данных, когда информация собирается в него из множества разнообразных источников. Тип данных курсор (cursor) применяется для переменных курсора. Использование курсора — отдельная большая тема, которой автор собирается посвятить целую статью.

Определяемые пользователями типы данных

SQL Server позволяет пользователям определять собственные типы данных, которые являются комбинацией системных типов данных. Как правило, они базируются на системном типе данных определенной длины (имеются в виду числовые и символьные значения), для которого назначаются правила и значения по умолчанию. Например, можно определить тип данных Почтовый индекс как char(10), а тип данных Телефонный номер как char(14). Тогда тип данных Почтовый индекс будет гарантировать целостность форматов почтовых индексов во всех столбцах, для любого клиента, поставщика, служащего или контактного лица где угодно по всему миру.

Но в тех случаях, когда пользователь хочет создать тип данных, имея лишь набросок желаемого, SQL Server оказывается не слишком полезным. К примеру, нельзя создать новый тип данных, обладающий целым набором связанных с ним свойств, для таких понятий как широта или долгота для географических приложений. Ведь для него пришлось бы прибегнуть к методам сферической тригонометрии для вычисления расстояния между двумя точками. Возможно, когда-нибудь SQL Server станет настолько гибким, что сможет помочь и в таких ситуациях.

На данный момент добавлять новые типы данных можно с помощью SQL Server Enterprise Manager или из анализатора запросов Query Analyzer (в версии SQL Server 6.5 это производится из окна ISQL/w). Каждый тип данных, который добавляют пользователи, действует только в пределах конкретной базы данных. Если же необходимо создать тип данных для всех баз, то его следует поместить в базу данных моделей Model. С момента создания в этой базе данных новый тип данных будет доступен во всех остальных базах. Существует другой способ решения этой проблемы — написать сценарий или сгенерировать его с помощью утилиты генерации сценариев Generate SQL Script, входящей в состав SQL Server. Тогда этот сценарий можно будет запускать из любой базы данных. В Enterprise Manager следует дважды щелкнуть правой кнопкой мыши на названии базы данных, а затем последовательно выбрать из меню Все задачи (All tasks), Генерировать сценарий SQL (Generate SQL Script) и наконец, выбрать пункт создания сценария для всех типов данных.

В окне Enterprise Manager следует выбрать пункт Базы данных (Databases), выбрать конкретную базу из списка, а затем перейти к пункту Определяемые пользователем типы данных (User-Defined Data Types). Щелкните правой кнопкой мыши и выберите пункт Свойства новых определяемых пользователем типов данных (New User-defined Datatype Properties). После этого приступайте к определению типа данных.

Как принято в SQL Server, добавить новый тип данных можно также с помощью анализатора запросов Query Analyzer. Обратите внимание на то, что кавычки заключают название системного типа данных, но вокруг названия вновь создаваемого типа данных их не ставят. Кроме того, полезно сразу указать, допускает ли создаваемый тип данных неопределенные значения. Для конкретного столбца можно будет в последующем переопределить эту установку, но первоначальная спецификация допустимых возможностей облегчает введение стандартов. А это и является той целью, ради которой вводятся новые типы данных.

При определении типов данных оператор создания таблицы может выглядеть так, как показано на листинге 2. Для тех столбцов, к которым применяются определенные пользователем типы данных, не требуется указывать длину помещаемых в него сведений, — ведь она уже была определена при создании типа данных. Можно также не сообщать системе о том, допустимы ли в рассматриваемом столбце неопределенные значения, поскольку это задано в спецификации типа данных. Хотя не повредит включить такое упоминание и в этот оператор.

Выберите правильный тип

Правильный подбор типов данных является частью проектирования таблицы. В SQL Server 6.5 очень трудно изменить свойства столбца после того, как он был создан. В версии SQL Server 7.0 это возможно, но проводить такую процедуру следует с крайней осторожностью.

Введение определяемых пользователем типов данных является одним из способов обеспечения целостности информации в различных приложениях, над которыми трудятся разные команды разработчиков. При этом предполагается , что все они используют SQL Server. Однако при перенесении кода SQL в другие СУБД целесообразно избегать применения определяемых пользователем типов данных.

Об авторе

Майкл Д. Рейли ([email protected]) является одним из основателей и вице президентом компании Mount Vernon Data Systems, которая занимается консалтингом по Windows NT и SMS, а также разработкой приложений,широко использующих базы данных. Он обладает сертификатами MCSE и MCT по Windows NT, SQL Server и SMS.

Листинг 1. Создание таблицы авторов книг Authors с использованием только системных типов данных.

au_id varchar(11) NOT NULL , aulname varchar (40) NOT NULL , au_fname varchar (20) NOT NULL , phone char (12) NOT NULL , address varchar (40) NULL , city varchar (20) NULL , state char (2) NULL , zip char (5) NULL , contract bit NOT NULL)

Листинг 2. Определение типов данных и последующее создание таблицы авторов книг Authors.

SP_ADDTYPE id, `char(11)`, `not null` GO SP_ADDTYPE phonenumber, `char(12)`, `not null` GO SP_ADDTYPE statecode, `char(2)`, `null` GO SP_ADDTYPE zipcode, `char(10)`, `null` GO CREATE TABLE dbo. authors (     au_id id NOT NULL ,     au_lname varchar (40) NOT NULL ,     au_fname varchar (20) NOT NULL ,     phone phonenumber(12) ,     address varchar (40) NULL ,     city varchar (20) NULL ,     state statecode,     zip zipcode,     contract bit NOT NULL )

www.internet-technologies.ru

Типы данных

Этот раздел описывает различные типы данных, доступные в СУБД Firebird и MS SQL, а также соответствия типов для перехода с одной системы на другую.

Доступные типы данных СУБД MS SQL зависят от версии СУБД. В следующей таблице перечислены типы данных и версия СУБД, в которой они были введены.

Таблица 1. Таблица соответствия типов данных

Вер. MSSQL

Тип данных

Тип Firebird

Определение MSSQL и пояснения

6.5

bigint

INT64

8-байтные целочисленные данные.

6.5

binary

CHAR

Двоичные данные фиксированной длины. Максимальная длина 8000 байт. В версии 6.5 максимальная длина была 255 байт.

6.5

bit

CHAR(1)

Целочисленные данные со значениями только 1 или 0. Обычно заменяются константами 'T' и 'F'. (В СУБД Firebird так же можно использовать тип SMALLINT со значениями 0 и 1. - прим. перев.)

6.5

char

CHAR

Текстовые данные фиксированной длины (не-Unicode). Максимальная длина 8000 символов. В версии 6.5 максимальная длина была 255 байт. СУБД Firebird способна хранить до 32767 символов.

6.5

cursor

Ссылка на курсор. Этот тип используется только в хранимых процедурах и триггерах; этот тип не может использоваться при объявлении структуры таблиц.

6.5

datetime

TIMESTAMP

Дата и время с 1 января 1753 года до 31 декабря 9999 года, точность 3/100 секунды (3.33 мс).

6.5

decimal

DECIMAL

Числовые данные с фиксированной точностью.

docs.huihoo.com

Типы данных

Любые данные, то есть константы, переменные, свойства, значения функций или выражения, в Object Pascal характеризуются своими типами. Тип определяет множество допустимых значений, которые может иметь тот или иной объект, а также множество допустимых операций, которые применимы к нему. Кроме того, тип определяет так же формат внутреннего представления данных в памяти ПК.

Object Pascal характеризуется разветвленной структурой типов данных (смотрите рисунок). В языке предусмотрен механизм создания новых типов, благодаря чему общее количество используемых в программе типов может быть сколь угодно большим.

Программа может оперировать данными различных типов: целыми и дробными числами, символами, строками символов, логическими величинами.

Простой тип: одно имя – одно значение.

Структурированный тип: одно имя – совокупность значений.

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

Целый тип

Язык Delphi поддерживает семь целых типов данных: shortint, smallint, Longint, Int64, Byte, word и Longword, описание которых приведено в табл.

Таблица. Целые типы

Тип

Диапазон

Формат

Shortint

-128-127

8 битов

Smallint

-32 768 - 32 767

16 битов

Longint

-2 147 483 648 - 2 147 483 647

32 бита

Int64

-263- 263 - 1

64 бита

Byte

0-255

8 битов, беззнаковый

Word

0-65 535

16 битов, беззнаковый

Longword

0 - 4 294 967 295

32 бита, беззнаковый

Object Pascal поддерживает и наиболее универсальный целый тип - Integer, который эквивалентен Longint.

Вещественный тип

Язык Delphi поддерживает шесть вещественных типов: Real48, single, Double, Extended, comp, Currency. Типы различаются между собой диапазоном допустимых значений, количеством значащих цифр и количеством байтов, необходимых для хранения данных в памяти компьютера.

Таблица. Вещественные (дробные) типы

Тип

Диапазон

Значащих цифр

Байтов

Real48

2.9x 10-39-1.7x1038

11-12

06

Single

1.5 x 10-45-3.4х 1038

7-8

04

Double

5.0x10-324 -1.7x10308

15-16

08

Extended

3.6x10-4951 -1.1 х104932

19-20

10

Comp

263+1 - 263-1

19-20

08

Currency

-922 337 203 685 477.5808 --922 337 203 685 477.5807

19-20

08

Язык Delphi поддерживает и наиболее универсальный вещественный тип - Real, который эквивалентен Double.

studfiles.net