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上的多个宅基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;
答案 0 :(得分:1)
最有可能的是,您的其他服务器(错误)配置为将NULL
值转换为空字符串,而另一台服务器配置为使用strict mode:
严格模式控制MySQL处理无效或缺失值的方式 数据更改语句,如INSERT或UPDATE。值可以是 因几个原因无效。例如,它可能包含错误的数据 列的类型,或者可能超出范围。缺少值 当要插入的新行不包含非NULL值时 在其定义中没有显式DEFAULT子句的列。 (为一个 NULL列,如果缺少值,则插入NULL。)
正确的解决方案就是你提到的那个:如果列不是强制性的,那么它首先不应该是NOT NULL
。