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
。