2013-02-26 47 views
0

我会预料到这会失败,但它会抹掉现有数据并用空字符串替换它。这是正确的行为?如果是,是否有解决办法,迫使一个错误,而不是尝试更新NOT NULL var char字段会将字段设置为空字符串而不是失败。这是否正确的行为

CREATE TABLE testtable 
    (columna VARCHAR(30) NOT NULL, 
    columnb VARCHAR(2) NULL, 
    columnc VARCHAR(10) NULL); 

INSERT INTO testtable (columna, columnb, columnc) 
VALUES ('first entry', '1', null), 
    ('second entry', '2', null), 
    ('third entry', '3', null); 

INSERT INTO testtable (columna, columnb, columnc) 
VALUES (null, '4', null); 

这种失败,错误 错误代码:1048列“columna”不能为空 这正是我所期望的。

然而,

UPDATE testtable 
SET columna = null WHERE columnb = '2'; 

取代columna的内容为空字符串

Select * from testtable; 

first entry 1 
      2 
third entry 3 

回答

0

有没有发现,这是给SQL模式。 通过设置

SET GLOBAL sql_mode = 'TRADITIONAL'; 

数据库现在作为我本来期望,并拒绝无效值。

相关问题