为什么 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。
在 Windows x64
上使用 DB2 10.5UPDATE 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。