5.3. Типы данных
СУБД SYBASE SQL Anywhere поддерживает большой спектр данных. Их можно разделит на несколько категорий:
- символьные типы;
- числовые типы;
- типы дата/время;
- двоичные типы;
- пользовательские типы.
Рассмотрим каждую категорию типов в отдельности.
5.3.1. Символьные типы
Символьные типы используются для представления как строк символов, так и отдельных символов. Перечень символьных типов представлен в табл. 8.
Таблица 8. Перечень символьных типов
Тип данных | Назначение | Размер |
CHAR | Строковый тип | до 32767 байт. по умолчанию 1 байт |
CHARACTER | Тоже, что и CHAR | |
CHARACTER VARYING | Тоже, что и CHAR | |
VARCHAR | Тоже, что и CHAR | |
LONG VARCHAR | Символьный тип произвольной длины. Аналог МЕМО-полям в dBase, FoxPro, Access | Длина произвольная. Ограничена максимальным размером файлов базы данных (2 гигобайта) |
TEXT | Тоже, что и LONG VARCHAR | |
Данные символьных типов представляются двоичными кодами. То, как они отображаются на экранах мониторов или распечатках принтера определяется так называемыми кодовыми таблицами. СУБД SYBASE SQL Anywhere поддерживает более 50 кодовых таблиц. Они позволяют отображать текстовую информацию символами различных алфавитов, начиная от английского, русского, греческого, испанского и кончая китайским и японским. Информация об имеющихся кодовых таблицах хранится в системной таблице SYS.SYSCOLLATION. Для извлечения из нее данных достаточно выполнить оператор
SELECT * FROM SYS.SYSCOLLATION
Для того, чтобы получить информацию о кодовой таблице используемой в базе данных необходимо воспользоваться утилитой DBINFO (см. табл. 5 - 6). Для этого в утилите ISQL следует запустить ее на выполнение следующим образом:
/*Получение информации
о базе данных Dubl_Biblia*/
DBTOOL DBINFO DATABASE
'c:\database\dubl.db' //полное имя базового файла
TO 'c:\database\dbinfo.txt' /*полное имя файла
для записи результата */
USING 'UID=Stepanov; PWD=S' /*строка пара-
метров соединения */
При использовании символьных данных нужно проверить как отображается символьная информация, хранимая в базе данных на вашей ЭВМ. На разных ЭВМ, в разных операционных системах и даже в разных приложениях она может визуально представляться по - разному. Например, автор при создании базы данных Biblia столкнулись со следующим фактом. При использовании кодовой странице 866RUS текстовые данные, хранимые в этой базе данных, нормально отображались символами русского алфавита в утилите ISQL. При считывании этих же данных через интерфейс ODBC в системах Access и Borland Delphi на экране появлялась непонятная абракадабра. Только после настройки параметров источника данных (было заполнено поле Translator Name - см. рис.16) проблема была решена.
5.3.2. Числовые типы
Числовые типы предназначены для обозначения целых, вещественных и денежных типов. Представители числовых типов приведены в табл. 9.
Таблица 9. Перечень числовых типов
Тип данных | Диапазон значений | Точность - число знаков после запятой | Размер |
INTEGER | от -2 147 483 648 до +2 147 483 647 | 0 | 4 байта |
INT | Тоже, что и INTEGER | | |
SMALLINT | от -32 768 до +32 767 | 0 | 2 байта |
REAL | от -3.4 e-38 до 3.4 e+38 | до 6 | 4 байта |
FLOAT | Тоже, что и REAL | | |
DOUBLE | от -1.797 e-308 до +1.797 e+308 | до 15 | 8 байт |
TINYINT | от 1 до 255 | 0 | 1 байт |
DECIMAL | числа состоящие из N цифр c M цифрами в дробной части. По умолчанию N=30, M=6 | M | сколько требуется |
NUMERIC | Тоже, что и DECIMAL | | |
MONEY | Для хранения денежных величин. Допустимо значение NULL. Числа из 20 цифр, с 4 цифрами после запятой | 4 | |
SMALLMONEY | Для хранения денежных величин. Допустимо значение NULL.. Числа из 10 цифр, с 4 цифрами после запятой | 4 | |
5.3.3. Типы дата/время
Типы дата/время предназначены для хранения времени, дат и дат совместно с временем. Такие типы, поддерживаемые СУБД SQL Anywhere, перечислены в табл. 10.
Таблица 10. Перечень типов дата/время
Тип данных | Назначение | Размер |
DATE | Тип для представления даты в виде совокупности года, месяца и числа. Значение года может изменяться в диапазоне от 0001 до 9999 года | 4 байта |
TIME | Тип для представления времени в виде совокупности часа, минут, секунд и долей секунд. Доли секунд хранятся с точностью до 6 знаков. | 8 байт |
TIMESTAMP | Тип для представления момента времени конкретной даты. Данные хранятся в виде совокупности года, месяца, числа, часа, минут, секунд и долей секунд. Доли секунд хранятся с точностью до 6 знаков. | 8 байт |
DATETIME | Тоже, что и TIMESTAMP | |
SMALLDATETIME | Тоже, что и TIMESTAMP | |
Обмен данными типа дата/время с базами данных производится:
- в формате структуры TIMESTAMP при использовании интерфейса ODBC;
- в формате структуры SQLDATETIME, если взаимодействие приложений с СУБД осуществляется через интерфейс Embedded SQL (см. рис. 1);
- через строку символов в других случаях.
В первых двух случаях все компоненты данных типа дата/время записываются в свои поля. В результате этого достигается однозначное представление информации. При использовании строки формат данных типа дата/время определяется такими параметрами баз данных как DATA_FORMAT, DATA_ORDER, TIME_FORMAT и TIMESTAMP_FORMAT. Различные сочетания этих параметров порождают большое число вариантов форматов. Однако это не должно вызывать особого беспокойства. Параметры базы данных устанавливаются для всей базы данных и действуют на все приложения и всех пользователей. Форматы данных типа дата/время, определяемые вышеуказанными параметрами баз данных по умолчанию, представлены в табл. 11.
Таблица 11. Форматы представления данных типа дата/время, определяемые по умолчанию
Тип данных | Формат, используемый по умолчанию |
DATE | 'YYYY-MM-DD' |
TIME | 'HH:NN:ss.SSS' |
TIMESTAMP | 'YYYY-MM-DD HH:NN:ss.SSS' |
DATETIME | 'YYYY-MM-DD HH:NN:ss.SSS' |
SMALLDATETIME | 'YYYY-MM-DD HH:NN:ss.SSS' |
В табл. 11 используются следующие сокращения:
- YYYY - четыре цифры , обозначающие год:
- MM - две цифры , обозначающие месяц:
- DD - две цифры , обозначающие день:
- HH - две цифры , обозначающие часы:
- NN - две цифры , обозначающие минуты:
- ss - две цифры , обозначающие секунды:
- SSS - три цифры , обозначающие доли секунд.
По умолчанию составляющие времени HH, NN, ss, SSS принимаются равными нулю, а DD - единице. Содержимое строк, представляющие данные типа дата/время , конвертируются автоматически. Некоторые примеры такого преобразования приведены в табл. 12.
Таблица 12. Примеры преобразования типов дата/время
Тип данных | Содержимое строки | Результат преобразования |
DATE | '1994-06-08' '1994-06' '1994-' '1994' | '1994-06-08' '1994-06-01' Ошибка преобразования Ошибка преобразования |
TIME | '19:50:25.136777' '19:50:25' '19:50' '19:' '19' | '19:50:25.136' '19:50:25.000' '19:50:00.000' '19:50:00.000' Ошибка преобразования |
TIMESTAMP | '1994-06-08 19:50:25.136777' '1994-06 19:50' '1994-06' | '1994-06-08 19:50:25.000' '1994-06-01 19:50:00.000' '1994-06-01 00:00:00.000' |
К сказанному следует добавить, что к данным типа дата/время применимы арифметические операции, перечень которых представлен в табл. 13.
Таблица 13. Арифметические операции, применимые к данным типов дата/время
Тип первого операнда | Операция | Тип второго операнда | Тип результата | Примечание |
DATE | + (-) | INTEGER | DATE | Увеличивает (Уменьшает) значение даты на целое количество дней |
TIMESTAMP | + (-) | INTEGER | TIMESTAMP | Увеличивает (Уменьшает) значение даты на целое количество дней |
DATE | + | TIME | TIMESTAMP | Формирует из исходных операндов значение типа TIMESTAMP |
DATE | - | DATE | INTEGER | Определяет разницу в днях между значения дат исходных операндов |
DATE | - | TIMESTAMP | INTEGER | Определяет разницу в днях между значения дат исходных операндов |
TIMESTAMP | - | DATE | INTEGER | Определяет разницу в днях между значения дат исходных операндов |
TIMESTAMP | - | TIMESTAMP | INTEGER | Определяет разницу в днях между значения дат исходных операндов |
5.3.4. Двоичные типы
Двоичные типы предназначены для представления двоичных данных, включая изображения и другую информацию, не обрабатываемую собственными средствами СУБД. Все двоичные типы приведены в табл. 14.
Таблица 14. Двоичные типы SQL Anywhere
Тип данных | Назначениеs | Размер |
BIT | Тип для представления значений 0 и 1. Аналог полей типа Logical в dBase, FoxPro | 1 байт |
BINARY | Тоже, что и CHAR, за исключением операций сравнения. В отличии от CHAR, данные этогопо умолчанию 1 байт типа сравниваются на полное совпадение двоичных кодов байтов | до 32767 байт |
LONG BINARY | Тип для представления двоичных данных произвольной длины | Длина произвольная. Ограничена максимальным размером файлов базы данных (2 гиго- байта) |
IMAGE | Тоже, что и LONG BINARY | |
5.3.5. Пользовательские типы данных
В СУБД SYBASE SQL Anywhere пользователям предоставлена возможность создавать свои типы данных. Они создаются на базе существующих типов
- путем запрета/разрешения записи значений NULL,
- определения значений по умолчанию (установки DEFAULT);
- задания условий на записываемые значения (установки CHECK).
Пользовательские типы можно создать и в утилите ISQL, и утилите SQL Central. В среде ISQL для решения этой задачи необходимо выполнить SQL-оператор CREATE DATATYPE. В SQL Central расширить состав имеющихся типов данных можно при помощи мастера Add User-defined Data Type, являющегося элементом папки User-defined Data Types (см. рис. 40). Право создания пользовательских типов данных имеют только пользователи, имеющие право создавать объекты базы данных (класс полномочий Resource) или обладающие правами администратора (класс полномочий DBA). Пользователь, создавший новый тип данных, становится его владельцем. Сразу после появления этого типа данных доступ к нему получают все пользователи, зарегистрированные в базе данных.
Новый тип данных может применяться при определении типов полей и при описании переменных в хранимых процедурах и триггеров. Удалить новый тип может его владелец или пользователь с классом полномочий DBA. Удаление этого типа данных возможно только в том случае, если он нигде не используется.
В завершении анализа типов данных, поддерживаемых SQL Anywhere, необходимо сказать следующее. Большое количество "собственных" типов данных и возможность создания пользовательских типов данных должны удовлетворить запросы самого взыскательного пользователя.
Назад |
Содержание |
Вперед