一般错误:1364 Field' xxxx'没有默认值

时间:2016-10-20 15:57:38

标签: mysql mode strict

我有一个项目,它使插入不会向 NOT NULL NO DEFAULT 值中的值插入值(非空值)。 我认为插入缺少必需值是不可能的,并且它总是会抛出错误:Field' xxxx'没有默认值。但正如我所见,here mysql可以设置为

sql-mode="NO_ENGINE_SUBSTITUTION"

我很困惑,因为我认为这很危险。如果我将其关闭,它将适用于所有项目,这可能非常糟糕。所以我该怎么做?是否可以仅为一个mysql数据库设置模式,而其他数据库将处于STRICT模式?你怎么看待这件事?这是一个问题吗?

3 个答案:

答案 0 :(得分:1)

sql-mode系统变量在全局和会话级别都可用。这意味着您必须为整个服务器或特定连接设置此项。因此,无法在服务器级别为DB的子集配置此项。但是,您可以在进行连接时指定sql模式。所以这些连接将以严格模式运行。

答案 1 :(得分:0)

我建议的解决方案是制作一个触发器,这样当没有值时,它会向该列插入一个空值

这是一个例子:

CREATE TRIGGER upd_check BEFORE UPDATE ON account
     FOR EACH ROW
     BEGIN
         IF NEW.amount < 0 THEN
             SET NEW.amount = 0;
         END IF;
END;

答案 2 :(得分:0)

So if somebody wants to know how it looks like in PHP/PDO for one concrete session:

$pdo = new PDO(
     $dsn, 
     $username, 
     $password, 
     array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET sql_mode="NO_ENGINE_SUBSTITUTION"') 
);