Я получил SQL для DB2 следующих сокращенного формата:DB2 Параметр связывание для буквальных сравнений
Select ...
From ...
Where ... ((COL1 IS NULL) And ('' = ?)) ...
Order By ...
Грубой целью этого SQL является возвращение Null записей, если вход против COL1 пустой.
Однако, если я пытаюсь связать «RED» с заполнителем, я получаю ошибку CLI0109E, указывающую «усечение строковых данных». Я считаю, что происходит то, что DB2 решила, что «литерал в SQL» является столбцом длины 0, поэтому попытка сравнить связанный параметр длины 3 (в случае «RED») вызывает ошибку усечения. Это имело бы смысл.
Если я сменил SQL на: ((COL1 IS NULL) And ('{10 spaces}' = ?))
, он отлично работает.
Если я сменил SQL на: ((COL1 IS NULL) And (CAST('' AS VARCHAR(32767)) = ?))
, он отлично работает.
Есть ли параметр драйвера или параметр SQLBindParameters, который мне не хватает, что приводит к тому, что DB2 интерпретирует '' как столбец нулевой длины?
Я запускаю тот же SQL через Oracle и SQLServer, и они отлично работают, что говорит мне, что они интерпретируют «как нечто иное», и, возможно, по умолчанию обрабатывают все литералы в SQL как VARCHAR (32767) или что-то в этом роде.
Спасибо за любую помощь.