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

Gre*_*try 3 php laravel

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

\n\n
\n

SQLSTATE[22007]: [Microsoft][ODBC Driver 17 for SQL Server][SQL\n Server]Bei der Konvertierung eines nvarchar-Datentyps in einen\n datetime-Datentyp liegt der Wert au\xc3\x9ferhalb des g\xc3\xbcltigen Bereichs。\n(SQL:插入 [用户]([名称]、[电子邮件]、[密码]、[updated_at]、\n [created_at])值 (john doe、j.doe@example.com、\n $2y$10$zPpJKp.clN8/SrhBhrupmO1ydWFb6UmrAUaD0Wid7fQHt85ieSwNi,\n 2018-04-24 10:03:26.286, 2018-04-24 10:03:26.286))

\n
\n\n

这翻译成英文:

\n\n
\n

将 nvarchar 数据类型转换为日期时间数据类型导致\n 日期时间值超出范围。”

\n
\n\n

我的迁移看起来像这样:

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

迁移后我的数据库如下所示:\n在此输入图像描述

\n\n

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

\n\n

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

\n\n

UPDATE1 \n另一种解决方案是用此方法覆盖它

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

小智 6

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