General error: 1364 Field 'xxxx' doesn't have a default value
General error: 1364 Field 'xxxx' doesn't have a default value
我有一个项目,它进行插入,不向 NOT NULL 和 NO DEFAULT[=18= 的列插入任何值(不是空值) ] 值。
我相信在缺少必需值的情况下插入是不可能的,它总是会抛出一个错误:Field 'xxxx' 没有默认值。但是我看到 here mysql 可以设置为
sql-mode="NO_ENGINE_SUBSTITUTION"
我很困惑,因为我认为这很危险。如果我将其关闭,它将适用于所有项目,这可能真的很糟糕。所以我该怎么做?是否可以只为一个 mysql 数据库设置模式,而其他数据库将处于 STRICT 模式?你怎么看待这件事?有没有问题?
sql-mode 系统变量在全局和会话级别均可用。这意味着您必须为整个服务器或特定连接设置它。所以没有办法在服务器级别为数据库的子集配置它。但是,您可以在建立连接时指定 sql 模式。所以这些连接将 运行 在严格模式下。
我建议的解决方案是创建一个触发器,这样当没有值时,它将向该列插入一个空值
这是一个例子:
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
END IF;
END;
因此,如果有人想知道在 PHP/PDO 中某个具体会话的情况:
$pdo = new PDO(
$dsn,
$username,
$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET sql_mode="NO_ENGINE_SUBSTITUTION"')
);
我有一个项目,它进行插入,不向 NOT NULL 和 NO DEFAULT[=18= 的列插入任何值(不是空值) ] 值。 我相信在缺少必需值的情况下插入是不可能的,它总是会抛出一个错误:Field 'xxxx' 没有默认值。但是我看到 here mysql 可以设置为
sql-mode="NO_ENGINE_SUBSTITUTION"
我很困惑,因为我认为这很危险。如果我将其关闭,它将适用于所有项目,这可能真的很糟糕。所以我该怎么做?是否可以只为一个 mysql 数据库设置模式,而其他数据库将处于 STRICT 模式?你怎么看待这件事?有没有问题?
sql-mode 系统变量在全局和会话级别均可用。这意味着您必须为整个服务器或特定连接设置它。所以没有办法在服务器级别为数据库的子集配置它。但是,您可以在建立连接时指定 sql 模式。所以这些连接将 运行 在严格模式下。
我建议的解决方案是创建一个触发器,这样当没有值时,它将向该列插入一个空值
这是一个例子:
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
END IF;
END;
因此,如果有人想知道在 PHP/PDO 中某个具体会话的情况:
$pdo = new PDO(
$dsn,
$username,
$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET sql_mode="NO_ENGINE_SUBSTITUTION"')
);