* Арифметические операции в диалекте 3 были взяты из стандарта SQL-92, в то время как диалект 1 использует нестандартные правила. Например, деление целого на целое в диалекте 3 возвращает усеченное целое, в то время как в диалекте оно вернет число с плавающей точкой двойной точности. Если ваше приложение сохраняет результат выражения, включающего подобную арифметическую операцию, "ошибочные" результаты будут сохранены без возбуждения исключения.
* Оба диалекта имеют тип данных даты и времени с именем DATE, но это разные типы. В диалекте 1 тип DATE эквивалентен типу TIMESTAMP диалекта 3, а в диалекте 3 DATE является типом, хранящим только дату; этот тип не поддерживается в диалекте 1.
* Диалект 3 поддерживает тип TIME (время дня), который отсутствует в диалекте 1.
* В базах данных диалекта 3 Firebird поддерживает соглашения ANSI SQL по идентификаторам с разделителями, которые заключаются в двойные кавычки; такие
идентификаторы не могут использоваться в диалекте 1. Несоответствие диалектов клиента и базы данных приведет к исключениям и некорректной работе.
* Диалект 3 имеет больше зарезервированных ключевых слов, чем диалект 1. Существующие базы данных диалекта 1, которые используют новые ключевые слова в качестве идентификаторов, не будут работать с клиентом диалекта 3.
* Диалекты 1 и 3 ведут себя по-разному в случае неявного преобразования типов. Это может стать проблемой, если вы хотите конвертировать существующую базу данных в диалект 3 и изменять использующие ее приложения.
Диалект 2
Не существует такого предмета, как "база данных диалекта 2". Диалект 2 является клиентской установкой, которую вы можете использовать для проверки переходных требований типов данных при конвертировании базы данных диалекта 1 в диалект 3. Inprise Corporation (теперь Borland) разработала документ "Migration Guide" (Руководство по миграции) для InterBase 6.0 в 2000 году, где подробно описаны действия по конвертированию баз данных диалекта 1 в диалект 3. Этот документ в формате PDF доступен на некоторых сайтах сообщества Firebird.
Вызовите окно командной строки и перейдите в каталог /bin, где находятся инструменты командной строки Firebird. Запустите утилиту isql. Соединитесь с вашей базой данных:
SQL> CONNECT '/opt/firebird/examples/employee.fdb'
CON> user 'SYSDBA' password 'icur2yy4m';
SQL>
Затем введите следующую команду ISQL:
SQL> SHOW SQL DIALECT;
Client SQL dialect is set to: 3 and database dialect is: 3
(Диалект SQL клиента установлен в: 3, диалект базы данных: 3)
Это хорошо. Если вы найдете несоответствие, это ничему не повредит, если вы не будете пытаться добавлять или изменять данные. Вы должны принять меры, чтобы гарантировать использование клиентом корректного диалекта.
Изменение диалекта клиента в isql
Предположим, что сейчас в isql вы хотите закрыть ваше соединение с текущей базой данных и соединиться с другой базой данных, о которой вы знаете, что она в диалекте 1. Вот что вы делаете:
SQL> COMMIT;
SQL> SET SQL DIALECT 1;
WARNING: client SQL dialect has been set to 1 when connecting to Database
SQL dialect 3 database.
(Предупреждение: SQL-диалект клиента установлен в 1 при соединении с базой данных с SQL-диалектом 3)
SQL>
Здесь все в порядке, потому что вы только собираетесь соединиться с базой данных диалекта 1:
SQL> CONNECT 'RSERVER:D:\DATA\SAMPLE\legacy.gdb'
CON> user 'SYSDBA' password 'icur2yy4m';
SQL> SHOW SQL DIALECT;
Client SQL dialect is set to: 1 and database dialect is: 1
(Диалект SQL клиента установлен в: 1, диалект базы данных: 1)
Множество свободно распространяемых и коммерческих инструментов администратора с графическим интерфейсом предоставляют возможность интерактивной установки диалекта клиента. Компоненты доступа к базе данных и драйверы имеют свойства или другие механизмы для передачи диалекта структуре соединения API.
Пора дальше
Следующие четыре главы подробно описывают типы данных, поддерживаемые для каждой из основных категорий данных: числа, дата/время, символы и BLOB. Глава 13, последняя глава в этой части, описывает реализацию доменов в Firebird для объединения типа данных с группой атрибутов в одно воспроизводимое определение.
ГЛАВА 9. Числовые типы данных.
Firebird поддерживает числовые типы данных с фиксированной точкой (точные числа) и с плавающей точкой (приблизительная точность). Десятичными типами с фиксированной точкой являются целые типы с нулевым масштабом SMALLINT, INTEGER и в диалекте 3 BIGINT, а также два почти одинаковых масштабируемых числовых типа: NUMERIC и DECIMAL. Два типа с плавающей точкой: FLOAT (низкая точность) и DOUBLE PRECISION [15] Точность задает количество значащих цифр (игнорируя конечные или начальные нули), которое может храниться в типе данных без переполнения или потери данных.
.
Читать дальше