字段';密码';不会';t具有默认值


Field 'password' doesn't have a default value

Laravel在Facebook登录时出错,并显示以下消息:

General error: 1364 Field 'password' doesn't have a default value

如果我将mysql-db-col设置为允许NULL并默认为NULL,那么它可以正常工作。

带有脚本的同一个数据库在多台其他机器上运行良好。为什么?我的mysql安装有什么问题?(不同机器上的mysql版本相同,ubuntu mysql工作正常,mac-mysql失败,mac上的多个homes-mysql也工作正常)

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `code` int(11) NOT NULL,
  `activate` int(11) NOT NULL DEFAULT '0',
  `avatar` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `phone` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `website` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `search_points` int(11) NOT NULL DEFAULT '0',
  `sms_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `sms_verify` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

很可能,您的其他服务器(错误)配置为将NULL值转换为空字符串,而另一台服务器配置为使用严格模式:

严格模式控制MySQL如何处理中的无效或缺失值数据更改语句,如INSERT或UPDATE。值可以是由于多种原因无效。例如,它可能有错误的数据类型,或者它可能超出范围。缺少值当要插入的新行不包含非NULL值时列的定义中没有显式DEFAULT子句。(对于NULL列,如果缺少值,则插入NULL。)

正确的修复方法应该是您提到的:如果列不是强制性的,那么它一开始就不应该是NOT NULL