为什么DB2将空字符串视为null?

Kar*_*arl 1 db2 db2-luw

在Windows x64上使用DB2 10.5

UPDATE dbo.datasource_databases
SET HOST = ''
WHERE ID = 1

Assignment of a NULL value to a NOT NULL column "TBSPACEID=2, TABLEID=6, COLNO=1" is not allowed.. SQLCODE=-407, SQLSTATE=23502, DRIVER=3.67.28
Run Code Online (Sandbox Code Playgroud)

HOST是VARCHAR(512)NOT NULL

这是预期的行为吗?如果是这样,我应该如何解决这个问题,如果不是,可能导致这种情况?

编辑:沿着相同的行,SELECT ID, HOST from dbo.datasource_databases WHERE HOST != ''返回0行,其中检查HOST != 'some gibberish'将返回行.对我而言,这比上述行为更有意义(不应该只是把它视为HOST NOT NULL?).

mus*_*cio 5

只有在为数据库启用Oracle兼容性或至少Oracle的VARCHAR2数据类型兼容性时才会发生这种情况,如此处所述.通常,DB2(根据ANSI SQL标准规定)将空字符串视为零长度的字符串,而不是NULL.