Php MSSQL Server INSERT NULL,但在DATETIME中插入GetDate()

Php MSSQL Server INSERT NULL,但在DATETIME中插入GetDate(),php,mysql,sql-server,codeigniter,datetime,Php,Mysql,Sql Server,Codeigniter,Datetime,我正在将数据库从MySQL迁移到MSSQL。 [MySQL]我有一个CHANGEDATE列,它的时间戳是默认的当前时间戳 [MSSQL]我有与DATETIME相同的CHANGEDATE列,并添加了GETDATE()的默认约束 代码库是使用CodeIgniter的PHP。我希望始终设置列,以便在两个DBMS中都不允许NULL 使用MySQL插入时,PHP模型CHANGEDATE的属性默认为NULL。这将触发默认值,列条目设置为当前_时间戳。但是,配置为MSSQL时,同样的代码会抛出一个错误,即列中

我正在将数据库从MySQL迁移到MSSQL。 [MySQL]我有一个CHANGEDATE列,它的时间戳是默认的当前时间戳 [MSSQL]我有与DATETIME相同的CHANGEDATE列,并添加了GETDATE()的默认约束

代码库是使用CodeIgniter的PHP。我希望始终设置列,以便在两个DBMS中都不允许NULL

使用MySQL插入时,PHP模型CHANGEDATE的属性默认为NULL。这将触发默认值,列条目设置为当前_时间戳。但是,配置为MSSQL时,同样的代码会抛出一个错误,即列中不允许NULL,这是有效的,但我更希望MSSQL函数像MySQL一样,并在该实例中插入GETDATE()的值

如果我取消设置($model->CHANGEDATE)或者从我的模型中删除属性,那么它就会像预期的那样工作,但是我想知道是否有一种方法可以解决这个问题,那就是使用MSSQL而不是更新我的所有PHP模型

class model {
public $CHANGEDATE;
...
}
错误(如上所述):
[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]无法在“CHANGEDATE”列中插入空值;列不允许空值。插入失败。
在日志中插入(…,CHANGEDATE,CHANGEBY)值(…,NULL,NULL)

更新: CI应创建对DBMS特定关键字的支持,如@steoleary在其回答中所述(我将其标记为正确)。然而,我发现最好的解决方案是稍微修改核心类DB_active_rec.php

function set(...){
...
foreach ($key as $k => $v)
{
if (is_null($v)) continue;
...
}
}

我不知道如何在code igniter中表达这一点,但在SQL Server中,这非常简单:

create table . . .  (
    changedate not null datetime default getdate()
)

不需要触发器。

我假设您已经在SQL server列上设置了默认值,并且您不允许空值,deafult约束不会对空值触发,它们只会在未指定值时触发,或者如果您指定在insert时按如下方式插入默认值:

INSERT INTO [dbo].[table]
           ([col1]
           ,[col2]
           ,[col3]
           ,[col4]) --Column with default constraint
     VALUES
           ('bob',
           'bobson',
           1,
           DEFAULT) --default keyword

这样做会触发默认设置,您不必更改您的模型。

我想知道为什么在这种情况下MySQL和SQL Server的行为会有所不同,因为我认为MySQL也应该这样工作……谢谢!这是在正确的轨道上。然而,现在的问题是如何从PHP中插入默认值。我正在使用活动记录。如果我使用引号,则假定我正在尝试插入字符串。请向我们展示MySQL和SQL Server版本的表和约束定义,好吗?