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

Why is DB2 treating an empty string as null?

在 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

HOST 是一个 VARCHAR(512) NOT NULL

这是预期的行为吗?如果是这样,我应该如何解决这个问题?如果不是,可能是什么原因造成的?

编辑:沿着相同的路线,SELECT ID, HOST from dbo.datasource_databases WHERE HOST != '' returns 0 行,其中检查 HOST != 'some gibberish' 将 return 行。对我来说,这比上面的行为更没有意义(它不应该把它当作 HOST NOT NULL 吗?)。

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