Вы должны использовать объединение для сбора данных из двух таблиц за одну операцию. СУБД очень хорошо справляются с объединениями; когда вы выполняете соединения вручную в приложении, вы замедляете работу, как правило, резко.
Типы данных являются критическими и не указаны в вопросе.
Типы SQL
- VARCHAR (n) - конечные пробелы значимы; строка нулевой длины не равна NULL.
- CHAR (n) - конечные пробелы добавляются СУБД и могут быть удалены приложениями.
ESQL / C Типы:
char
- для данных CHAR; пустой пробел дополняется до нуля символом '\ 0'.
fixchar
- для данных CHAR; заготовка дополняется до полной длины без терминатора NUL '\ 0'.
varchar
- для данных VARCHAR; не заполнено пробелом.
- Также можно использовать указатели на эти типы, что усложняет ситуацию (компилятор не знает, насколько велика область, на которую указывает указатель).
Вы также упомянули использование '\
' для загрузки данных. Это специальная запись, используемая с ненулевыми полями VARCHAR нулевой длины для указания этого значения; пустое поле указывает значение NULL в формате выгрузки. (На диске пустой ненулевой VARCHAR занимает один байт, значение 0x00 для длины ноль; NULL VARCHAR занимает два байта, значения 0x01 0x00 для длины 1 и значение NULL (или NUL).)
Судя по тому, что вы говорите, у вас, возможно, есть пустые (но не NULL) значения VARCHAR (n) во второй таблице. Они должны отображаться как строковые значения, где первый байт равен NUL '\ 0' в вашем C-коде - независимо от того, какой тип переменной вы используете. Вывод из GDB соответствует этому; первый байт равен «\ 0» (или «\ 000»); остальное не имеет значения.
Возможно, вы захотите посмотреть переменные индикатора; они сообщают вам, является ли конкретное значение, выбранное в БД, ПУСТО (NULL) или нет.
Если у вас все еще есть проблемы, опубликуйте код (желательно очень небольшую скомпилируемую программу, которая показывает проблему - скажем, до 50 строк или около того; или небольшой фрагмент кода - скажем, 20 строк или около того).