我试图执行以下sql查询。给予error #1071
。我已将'varchar (300)'
更改为'varchar (255)'
,将'MyISAM'
更改为'InnoDB'
。还是行不通。我不熟悉MySQL。
最终守则:
CREATE TABLE IF NOT EXISTS `nwjhmu_users_oauth` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`provider` varchar(100) NOT NULL,
`identifier` varchar(255) NOT NULL,
`email` varchar(200) NOT NULL,
`displayName` varchar(150) NOT NULL,
`firstName` varchar(100) NOT NULL,
`lastName` varchar(100) NOT NULL,
`profileURL` varchar(255) NOT NULL,
`photoURL` varchar(255) NOT NULL,
`webSiteURL` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
`gender` varchar(10) NOT NULL,
`language` varchar(10) NOT NULL,
`age` tinyint(3) unsigned NOT NULL,
`birthDay` tinyint(3) unsigned NOT NULL,
`birthMonth` tinyint(3) unsigned NOT NULL,
`birthYear` int(10) unsigned NOT NULL,
`country` varchar(50) NOT NULL,
`region` varchar(50) NOT NULL,
`city` varchar(50) NOT NULL,
`zip` varchar(20) NOT NULL,
`registerDate` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `provider` (`provider`,`identifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
提前致谢。
答案 0 :(得分:1)
查询没有任何问题。语法非常好。 但是,根据MySQL中密钥长度的限制,您使用'provider'和'identifier'作为唯一密钥,这些密钥可能很长。但是,您似乎使用的是过时的MySQL版本,因为当前版本支持的密钥大小最多为3072字节。
一种解决方法是您可以使用(比如说)前100个字段的字符:
UNIQUE KEY `provider` (`provider`(100),`identifier`(100))
而不是:
UNIQUE KEY `provider` (`provider`,`identifier`)