使用firebird中的iif更新varchar字段时的空格

Rey*_*ldi 7 sql firebird firebird2.5

执行此查询时,我看到奇怪的结果

update sd_invodt set line_type=iif(is_promo=1, 'campaign', 'item')
Run Code Online (Sandbox Code Playgroud)

line_type字段中的值为"item ".有价值的空白.但是当我执行这个查询时

update sd_invodt set line_type='item'
Run Code Online (Sandbox Code Playgroud)

我没有白色空间.

现在我必须使用trim作为解决方法

update sd_invodt set line_type=trim(iif(is_promo=1, 'campaign', 'item'))
Run Code Online (Sandbox Code Playgroud)

我使用最新的firebird 2.5.Line_type是varchar(15).

这是Firebird中的错误吗?

编辑

我已经使用新数据库进行了测试,问题仍然存在.

ain*_*ain 4

结果类型iif()取决于输入,如果是字符串,结果类型似乎是最长输入字符串的长度char(x)x因此,"item"将用 4 个空格填充,使其与“活动”一样长。我认为这是设计使然,但您可能需要输入FB Issuetracker 的票证。

因此,如果第一个参数为 false,则iif()返回,并且当您将空格存储到字段时,它们将被保留。"item "varchar

  • 它不被视为错误,请参阅 [CORE-4147](http://tracker.firebirdsql.org/browse/CORE-4147) (3认同)