Поделиться через


Хранение данных в символьном формате

Способ хранения данных, имеющих символьный формат, в файле экспортируемых данных, зависит от способа хранения данных в таблице Microsoft SQL Server. Важны два следующих шаблона хранения данных:

  • SQL Server данные типа char.

  • Другие типы данных, преобразуемые в тип char для хранения.

Шаблоны хранения данных типа char в SQL Server

SQL Server Сохраняемые в файле в формате char данные всегда занимают в нем полную длину столбца согласно его определению. Например, столбец, определенный как char(10), всегда занимает 10 символов в файле независимо от длины хранящихся в столбце данных. Если данные типа char короче указанной длины поля, к концу строки добавляются пробелы в качестве набивки; дополнительные сведения об этом см. в разделе SET ANSI_PADDING (Transact-SQL). Однако для типа данных varchar сохраняются лишь действительно содержащиеся в данных символы, кроме случаев использования префикса или признака конца.

Шаблоны хранения других типов данных, преобразуемых в символьные данные

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

  • Если длина префикса равна 0, а признак конца отсутствует, поле обрабатывается, как имеющее постоянную длину, определяемую значением длины поля. Если указывается длина префикса, равная 0, и отсутствие признака конца, то программа bcp выделяет максимальный объем пространства, указанный в параметре длины поля, так как он может потребоваться для хранения данных обрабатываемого типа. Такой способ хранения данных позволяет определить конец поля и начало следующего поля.

  • Если длина префикса равна нулю, но признак конца используется, значение длины поля не учитывается. Для хранения данных поля используется пространство, равное длине данных плюс длина признака конца.

    Важное примечаниеВажно!

    Указание префикса и признака конца поддерживается только в файлах формата, отличного от XML.

  • Если длина префикса равна 1, 2 или 4, значение длины поля не учитывается. Для хранения поля используется пространство, равное длине поля плюс длина префиксов поля и признаков конца (если они есть).

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

Примеры

Следующие примеры демонстрируют эффект применения различной длины поля, длины префиксов и признаков конца при хранении данных в формате char. Значению длины префикса, если оно указывается, соответствует P. Признаку конца, если он присутствует, соответствует T. Многоточие (...) указывает, что шаблон повторяется для каждого поля.

Примеры шаблонов хранения данных типа char в SQL Server:

ПримечаниеПримечание

Данные типа char всегда сохраняются в полной длине (то есть дополняются пробелами).

Таблица имеет схему t1 (c1 char(8)). В следующих примерах предполагается длина символьного значения, равная пяти (для строки Hello), которая хранится в поле длиной 8 символов. В каждом из примеров полей данных к 5-символьному значению Hello всегда должны быть добавлены три пробела. Присоединяемые пробелы изображаются тремя точками (•••).

Длина префикса = 0

Длина префикса = 1, 2 или 4

Отсутствует признак конца

Hello•••Hello•••...

PHello•••PHello•••...

Признак конца

Hello•••THello•••T...

PHello•••TPHello•••T...

ПримечаниеПримечание
Этот пример применяется только к файлу форматирования в формате, отличном от XML.

Примеры шаблонов хранения несимвольных типов данных при преобразовании в символы для хранения

Таблица имеет схему t1 (c1 int), а каждая строка имеет значение 999 целочисленного типа.

ПримечаниеПримечание

Для данных, преобразуемых при хранении в char с использованием префикса длиной 1, 2 или 4 или при использовании признака конца, добавление пробелов после значения данных не требуется.

Длина префикса = 0

Длина префикса = 1, 2 или 4

Отсутствует признак конца

999••999••...

P999P999...

Признак конца

999T999T...

P999TP999T...

ПримечаниеПримечание
Этот пример применяется только к файлу форматирования в формате, отличном от XML.
ПримечаниеПримечание

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