错误:指定的密钥太长;最大密钥长度为1000字节-将数据库导入MySQL

szqfcxe2  于 2023-01-29  发布在  Mysql
关注(0)|答案(1)|浏览(210)

我在一台windows10机器上安装了一个新的wampserver,我试图通过phpmyadmin将一个包含大约10个不同表的现有数据库导入到一个新的数据库中。
在SQL查询编辑器中为特定表运行"create table"命令时,收到以下错误:

1071-指定的密钥太长;最大密钥长度为1000字节

这是我正在运行的命令:

DROP TABLE IF EXISTS `subscription_items`;
CREATE TABLE IF NOT EXISTS `subscription_items` (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `subscription_id` bigint(20) UNSIGNED NOT NULL,
  `stripe_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `stripe_plan` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `quantity` int(11) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `subscription_items_subscription_id_stripe_plan_unique` (`subscription_id`,`stripe_plan`) USING HASH,
  KEY `subscription_items_stripe_id_index` (`stripe_id`(250))
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

有什么想法可以改变哪个设置来使这个错误消失吗?我试着在my.ini文件中寻找,但无法发现要改变的设置。而且这个数据库在以前安装的wamp中工作。

jum4pzuy

jum4pzuy1#

任何设置都不能更改MyISAM表的此限制。
https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html表示:
最大密钥长度为1000字节。也可以通过更改源代码并重新编译来更改此长度。
索引列中bigint为8字节,string为255 * 4字节/字符,为了索引,必须假设你 * 可能 * 在某行中使用了utf8mb4字符串的全长,即使你还没有这样做,总共1028字节。
您可以使用varchar(248)或更短的命令来修复此问题。
您也可以通过使用InnoDB而不是MyISAM来解决这个问题。在MySQL的最新版本中,InnoDB支持最多3072字节的索引长度。
无论如何,我建议使用InnoDB而不是MyISAM。

相关问题