SQLSTATE[22007]: 日期时间格式无效: 1292 错误的日期时间值: '2008-03-30 02:56:12'

3

系统 本地 PHP 5.6.19 使用 Laravel 5.0 制作的应用程序,使用 fzaninotto/Faker 作为种子生成器 远程 Mysql

远程 MySQL Debian 8,使用 MariaDB 10.1.13-MariaDB-1~jessie

正在运行种子生成器

php artisan migrate:reset; php artisan migrate; php artisan db:seed

在使用seeder添加不确定数量的用户后(每次错误的复制都不同),会出现错误:

[Illuminate\Database\QueryException]
  SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2008-03-30 02:56:12' for column 'created_at' at row 1 (S
  QL: insert into `users` (`type`, `name`, `email`, `nick`, `password`, `vat`, `address`, `zipcode`, `city`, `state`, `country`, `cr
  eated_at`, `updated_at`) values (customer, Adrian Santos, qpuig@live.com, rzavala12, y$Veqd2mkgRHtl6VKtYBV0yey77tVLo34.6THXqhtGRwg
  /Ea73/FhlK, 02058805Y, Plaça Abril, 85, 96º D, 44824, Vargas de San Pedro, 57431, San Roig, Huesca, ES, 2008-03-30 02:56:12, 2008-
  03-30 02:56:12))

好的..日期时间是2008年03月30日02:56:12

使用seeder创建之前最新的3个用户示例,出现错误:

INSERT INTO `users` (`id`,`type`,`email`,`nick`,`password`,`name`,`vat`,`address`,`zipcode`,`city`,`state`,`country`,`totals`,`remember_token`,`created_at`,`updated_at`) VALUES (15053,'buyer','asauceda@live.com','celia657','$2y$10$P4SOJOAQHsC8W7ctJ5v1F.8loccYzjAW95ILwWZ1RzObNs01hKjr2','Bruno Aguado','71514876X','Paseo Corral, 1, Entre suelo 0º, 63362, La Saiz','58061','Navarrete de Ulla','Cádiz','ES',NULL,NULL,'2012-09-13 06:01:51','2012-09-13 06:01:51');
INSERT INTO `users` (`id`,`type`,`email`,`nick`,`password`,`name`,`vat`,`address`,`zipcode`,`city`,`state`,`country`,`totals`,`remember_token`,`created_at`,`updated_at`) VALUES (15052,'buyer','ana.serna@live.com','cristian126','$2y$10$fe2Hdh4p0bttNfo9uzwSe.L5OOzPwsm5p8g5.YhW5PAoxKcSObDta','Enrique Rivero','06604287K','Ronda Saul, 321, 8º C, 76264, San Álvarez de Arriba','11402','El Roybal Baja','Zamora','ES',NULL,NULL,'2007-11-14 16:39:41','2007-11-14 16:39:41');
INSERT INTO `users` (`id`,`type`,`email`,`nick`,`password`,`name`,`vat`,`address`,`zipcode`,`city`,`state`,`country`,`totals`,`remember_token`,`created_at`,`updated_at`) VALUES (15051,'buyer','iluna@terra.com','aalmanza21','$2y$10$EA.NhWHuT8.nGoZjD18hqOKatHH3MbboY2DjZywlceH8K60spAe5m','Miriam Riojas','24055470T','Calle Soriano, 0, 75º A, 29744, L\' Montenegro','12236','As Martínez','Illes Balears','ES',NULL,NULL,'2013-03-25 23:15:50','2013-03-25 23:15:50');
INSERT INTO `users` (`id`,`type`,`email`,`nick`,`password`,`name`,`vat`,`address`,`zipcode`,`city`,`state`,`country`,`totals`,`remember_token`,`created_at`,`updated_at`) VALUES (15050,'buyer','qsalgado@hotmail.com','mateo26','$2y$10$6.lFRsqEjXb1kdZOhAX7Cu1Xecgu1ZvAkhaADKcfSpEi6ODQM9nRK','Alonso Núñez','50161945A','Camino Ainara, 78, 65º A, 17155, L\' Ayala del Pozo','47226','Román de las Torres','Las Palmas','ES',NULL,NULL,'2016-05-12 11:00:01','2016-05-12 11:00:01');

阅读一些信息,例如MYSQL日期时间格式不正确如何在MySQL my.cnf中永久设置sql-mode=“NO_ENGINE_SUBSTITUTION”并验证mysql变量以解决此问题。

MariaDB [(none)]> select @@GLOBAL.sql_mode;
--------------
select @@GLOBAL.sql_mode
--------------

+------------------------+
| @@GLOBAL.sql_mode      |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
MariaDB [(none)]> select @@SESSION.sql_mode;
--------------
select @@SESSION.sql_mode
--------------

+------------------------+
| @@SESSION.sql_mode     |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)
1个回答

10

这个问题很简单,它涉及到“夏令时”的问题。

通过查看西班牙夏令时表,确定日期为2011年3月27日下午2:00。因此,在02:00至02:59之间的任何时间都将失败,因为时钟会在02:00向前调整到02:59。


列(created_atupdated_at)的数据类型是TIMESTAMP吗?使用DATETIME数据类型不会出现这种情况。 - wchiquito
@wchiquito,这不是问题。问题在于使用DATETIME。感谢您的评论。如果仔细阅读,列具有日期时间格式。错误显示。是的,发生了。请阅读我的解决方案,并尝试进行相同的插入,以重现问题。 - abkrim
我无法重现使用数据类型DATETIME的问题。使用TIMESTAMP会出现预期错误。 - wchiquito
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Rick James
2
起初我对提供的答案理解不够,但@abkrim是正确的。总之,Faker没有考虑夏令时,因此可能会提供不存在的时间。例如,在2016年,美国夏令时于3月13日开始,所以在凌晨2点时,时钟会向前调整到3点。因此,“2016-03-13 02:01:00”到“2016-03-13 02:59:00”都是无效的时间戳,因为这些时间从未存在过。 - JamieHoward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接