Пробелы при обновлении поля varchar с использованием iif в firebird

Я вижу странный результат при выполнении этого запроса

update sd_invodt set line_type=iif(is_promo=1, 'campaign', 'item')

Значение в поле line_type будет "item ". В значении есть пробелы. Но когда я выполняю этот запрос

update sd_invodt set line_type='item'

У меня не появляются пробелы.

Теперь я должен использовать обрезку в качестве обходного пути.

update sd_invodt set line_type=trim(iif(is_promo=1, 'campaign', 'item'))

Я использую последнюю версию Firebird 2.5. Line_type — это varchar(15).

Это ошибка в Firebird?

ИЗМЕНИТЬ

Я проверил с использованием новой базы данных, и проблема не устранена.


person Reynaldi    schedule 02.11.2013    source источник


Ответы (1)


Тип результата iif() зависит от ввода, и в случае строки тип результата выглядит как char(x), где x — длина самой длинной входной строки. Таким образом, "item" будет дополнено 4 пробелами, чтобы сделать его таким же длинным, как «кампания». Я думаю, что это сделано специально, но вы можете ввести билет в систему отслеживания ошибок FB.

Таким образом, iif() возвращает "item " в случае, если первый параметр имеет значение false, и когда вы сохраняете пробелы в поле varchar, они сохраняются.

person ain    schedule 02.11.2013
comment
Это не считается ошибкой, см. CORE-4147. - person Mark Rotteveel; 02.11.2013