在MySQL中,主键和唯一索引是最常见的索引类型,它们都需要唯一性保证。主键是表中的一列或列组合,用于唯一标识每一行数据。唯一索引是一组列,用于确保这些列的值是唯一的。
MySQL对于单列索引,最大索引字段长度是767字节。如果是多列组合索引,那么最大索引字段长度会略微减少。这个长度限制包括了索引列的前缀长度,因此,在创建索引时需要考虑列值的大小以及索引列的长度。
CREATE TABLE test (
id INT(11) NOT NULL,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY (name, address(100))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
上面的代码创建了一个名为test的表,其中id是主键,name和address组合成一个唯一索引,其中address列只取前100个字符进行索引。
需要注意的是,在使用utf8mb4字符集时,每个字符需要4个字节的存储空间,因此最大长度变为了767/4=191.75。如果使用utf8字符集,则每个字符需要3个字节,最大长度为255。
如果需要创建长字段索引,可以考虑使用FULLTEXT索引或者hash索引,它们没有长度的限制,但是其它特性也不同。
CREATE TABLE test (
id INT(11) NOT NULL,
name VARCHAR(255) NOT NULL,
address TEXT NOT NULL,
FULLTEXT KEY (address),
HASH KEY (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
上面的代码创建了一个名为test的表,其中address列使用FULLTEXT索引,name列使用hash索引。
综上所述,MySQL对于索引字段长度有一定的限制,需要在使用索引时考虑到列值的大小和索引列的长度,以及字符集的存储空间。如果需要使用长字段索引,可以考虑FULLTEXT索引或者hash索引。