繁体   English   中英

使用Laravel和MSSQL将nvarchar转换为日期时间数据类型时出错

[英]Error converting nvarchar to datetime data type using Laravel and MSSQL

我在IIS上成功安装了Laravel。 我也成功地将laravel连接了MSSQL DB。 我运行artisan命令php artisan make:authphp artisan migrate 。以进行登录/注册页面。 现在,当我注册一个新用户时,出现错误:

SQLSTATE [22007]:[Microsoft] [用于SQL Server的ODBC驱动程序17] [SQL Server]在日期时间中的变量-在数据库中运行的Datentyp位置。 (SQL:在[用户]([名称],[电子邮件],[密码],[updated_at],[created_at]中插入)值(john doe,j.doe @ example.com,$ 2y $ 10 $ zPpJKp.clN8 / SrhBhrupmO1ydWFb6UmrAUaD0Wid7fQHt85ieSwNi,2018-04-24 10:03:26.286,2018-04-24 10:03:26.286)

这翻译成英文:

nvarchar数据类型到datetime数据类型的转换导致datetime值超出范围。”

我的迁移看起来像这样:

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->tinyInteger('active')->default(1);
            $table->rememberToken();
            $table->timestamps();
        });
    }

和我的数据库迁移后如下所示: 在此处输入图片说明

在MSSQL中,我正在使用SQL_Latin1_General_CP1_CI_AS 有人知道问题是什么吗?

UPDATE '快速解决方案:我将mssql列created_at和updated_at更改为nvarchars(50)

UPDATE1另一个解决方案是使用此方法覆盖它

public function fromDateTime($value)
{
    // Only for MSSQL
    if(env('DB_CONNECTION') == 'sqlsrv') {
        return Carbon::parse(parent::fromDateTime($value))->format('Y-d-m H:i:s:000');
    }
    return $value;
}

如果有人遇到这个问题,我使用受保护的$ dateFormat ='dmY H:i:s'解决了; //在模型中根据需要设置格式。

如果Jefers的答案不起作用,请在您的模型中尝试以下操作:

public function getDateFormat(){
    return 'Y-d-m H:i:s.v';
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM