尝试更新NOT NULL var char字段会将字段设置为空字符串而不是失败。这是正确的行为吗?

时间:2013-02-26 16:12:04

标签: mysql null mode xeround

我原本预计会失败,但它会擦除现有数据并用空字符串替换它。这是正确的行为吗?如果是,是否有工作来强制错误

例如

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   

1 个答案:

答案 0 :(得分:0)

已经发现这是sql模式。 通过设置

SET GLOBAL sql_mode = 'TRADITIONAL';

数据库现在可以正常工作,并拒绝无效值。