我在一台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中工作。
1条答案
按热度按时间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。