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

时间:2015-03-02 23:52:44

标签: 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

HOST是VARCHAR(512)NOT NULL

这是预期的行为吗?如果是这样,我应该如何解决这个问题呢?如果没有,可能导致这种情况发生了什么?

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

1 个答案:

答案 0 :(得分:5)

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