Использование CHARACTER SET OCTETS

Иногда в символьных полях требуется хранить не просто произвольные данные, но и данные, содержащие 0. Конечно, вполне можно такие данные хранить и в Blob. Но для коротких строк (примерно до 255 символов) Blob слишком "тяжел" и неудобен. Наиболее заманчивым представляется хранение GUID в двоичном виде (как в MS SQL – специальное 16-байт поле), т. к. в строковом виде GUID получается примерно раза в два длиннее, а при большом количестве записей это может составить существенный "лишний" объем данных.

Однако, практически все клиентские библиотеки рассматривают строковые поля как C-string, т. е. строки, завершающиеся символом #0. Собственно, касается это TField и его вариаций. Единственным способом работать со строками с OCTETS остаются компоненты FIBQuery из FIBC (FIBPlus) и IBSQL из IBX. Эти компоненты в качестве полей напрямую используют XSQLVAR, таким образом считываемая и записываемая строка не подвергается никаким преобразованиям, что позволяет хранить в поле CHARACTER SET OCTETS любые символы, включая #0.

Других особенностей при работе с этим набором символов нет.

Литература:
  1. IB Language Reference, глава 8 – Character Sets and Collation Orders
  2. Хранение GUID и размер индексов

Подпишитесь на новости Firebird в России

Подписаться