【发布时间】:2011-06-25 20:21:37
【问题描述】:
还有一些关于此错误的其他问题,但我很难理解这个问题。
我正在尝试制作一个非常基本的 MySQL 表。我正在尝试将所有内容都保存在 utf8 中,我确实理解它比普通字符集占用更多字节。
CREATE TABLE `bibliography` (
`id` int(5) unsigned zerofill NOT NULL,
`pub_type` varchar(5) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`pub_genre` varchar(5) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`author_first` varchar(5) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`author_last` varchar(5) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`publication` varchar(5) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`pub_date` date NOT NULL,
`pub_city` varchar(5) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`pub_country` varchar(5) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`html` text NOT NULL,
`live` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `pub_type` (`pub_type`,`pub_genre`,`title`,`author_first`,`author_last`,`publication`,`pub_date`,`pub_city`,`pub_country`),
KEY `live` (`live`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
好的,以上工作,但显然我不能活 5 个字符作者姓名。当我尝试提高限制时:
ALTER TABLE `bibliography` CHANGE `author_first` `author_first` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
我得到错误:
1071 - 指定的密钥太长;最大密钥长度为 1000 字节
所以,我不明白。 1000 字节的限制是否适用于整个表?显然是的,对吧?
根据答案,有人可以告诉我设置索引之间的区别,例如:
KEY `live` (`live`),
KEY `pub_type` (`pub_type`),
KEY `pub_genre` (`pub_genre`),
KEY `author_last` (`author_last`),
KEY `publication` (`publication`)
喜欢:
KEY `pub_type` (`pub_type`,`pub_genre`,`title`,`author_first`,`author_last`,`publication`,`pub_date`,`pub_city`)
我在这里开始明白,KEY 限制为 1000 个字节。但是你可以在一个表中有多个键。如何将一堆字段组合成一个键不同的形式为每个不同的字段分配一个键?
【问题讨论】:
-
这个问题的答案已经给here了。
标签: mysql phpmyadmin key