0

我原以为这会失败,但它会擦除现有数据并将其替换为空字符串。这是正确的行为吗?如果是,是否有解决方法来强制错误

例如

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   
4

1 回答 1

0

已经发现这归结为sql模式。通过设置

SET GLOBAL sql_mode = 'TRADITIONAL';

数据库现在可以按我的预期工作并拒绝无效值。

于 2013-03-03T19:24:24.447 回答