mysql - PHPMyAdmin 中的 SQL 查询未执行,显示错误 #1071

标签 mysql sql

我试图执行以下 sql 查询。这给出了错误#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 ;

最佳答案

查询没有任何问题。语法完全没问题。 但是,您使用“provider”和“identifier”作为唯一键,根据 MySQL 中键长度的限制,它们可能会很长。但是,您似乎使用的是过时版本的 MySQL,因为当前版本支持最大 3072 字节的 key 大小。

一种解决方法是您可以使用(例如)字段的前 100 个字符:

UNIQUE KEY `provider` (`provider`(100),`identifier`(100))

而不是:

UNIQUE KEY `provider` (`provider`,`identifier`)

关于mysql - PHPMyAdmin 中的 SQL 查询未执行,显示错误 #1071,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21721409/

相关文章:

php - 在opencart中查询获取具体值

mysql - 我怎样才能使这个 mysql 查询更有效并运行得更快?

mysql - Plesk nginx Ubuntu 16 - 外部 MySQL 连接被拒绝

mysql - 查询以 & 开头的值 - 在 Oracle 中有效但在 MySQL 中无效?

sql - 使用 sql 变量更新 PostgreSQL hstore 字段

Mysql 条件求和

php - 数据库表结构查询

sql - Postgres INTERVAL 使用表中的值

sql - 用于添加多列的 DB2 alter table 语句如何工作?

mysql - 强制 MySQL 使用非包含索引来避免表扫描?