在Laravel应用程序中,mysql import将timestamp null值转换为0000-00-0000:00 00:00

时间:2016-10-31 13:04:59

标签: php mysql laravel csv

在Laravel应用程序中,我有一个为softDeletes创建的MySQL时间戳字段 deleted_at ,默认值为NULL。如果该值不为NULL,则Eloquent将不会检索数据。当我导入CSV文件时,源文件中的NULL值变为0000-00-00 00:00:00。

我看了Mysql import transforms timestamp null values to 0000-00-00 00:00:00并且\ N对我不起作用。我有很多表需要定期导入,所以我真的需要解决这个问题。请帮忙。

2 个答案:

答案 0 :(得分:0)

您需要在MySQL中禁用严格模式。特别是,模式名称是STRICT_TRANS_TABLES。打开/etc/mysql/my.cnf(或Windows中的同一文件),在那里找到并注释掉STRICT_TRANS_TABLES

更多信息请点击此处:

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict

答案 1 :(得分:0)

我认为您应该看到 config / database.php 文件。此文件包含可在其中设置严格模式的变量 - 开/关。

Laravel现在为您提供启用/禁用mysql模式的能力。有了这个新功能,Laravel现在可以做三件事:禁用"严格"模式,返回< = 5.6行为;启用"严格"模式,将其设置为5.7行为;或者自定义确切启用哪些模式。

您文件中的代码就是这样......

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => true, // <----- This variable sets the strict mode.
        'engine' => null,
  ],

如果要禁用严格模式,请将此值设置为false,否则将其设置为true以启用严格模式。 希望这可以帮助您解决问题。