0
CREATE SCHEMA IF NOT EXISTS `utftest`  DEFAULT CHARACTER SET utf16;
CREATE  TABLE IF NOT EXISTS `metadata_labels` (`metadata_id` INT NOT NULL , `label` VARCHAR(256) NOT NULL ,  PRIMARY KEY (`metadata_id`, `label`));

但是我收到以下错误消息:

Specified key was too long; max key length is 767 bytes

请指教

4

2 回答 2

1

在 UTF8 中,它需要3 x 256 + 4 = 772字节。UTF16 将再多占用 25%。

你不应该使用这么宽的主键;为了使索引有效,每个索引的存储空间应保持在最低限度。

如果您需要防止重复,我建议添加一个包含内容哈希的计算字段(例如 sha1),并在其上创建一个唯一约束。

或者,latin1用作字段的字符编码以将label字节数减少到256 + 4 = 300.

如果 Unicode 是必须的并且散列不在图片中,您应该将该列减少为 UTF8(250 个字符)或 UTF16(190 个字符)

于 2013-02-12T23:51:05.103 回答
1

UTF 16 在 MySQL 中使用每个字符 32 位(4 个字节)。4 x 256 > 767

如果可能,我建议您使用 UTF16 以外的其他VARCHAR方式作为您的密钥。

于 2013-02-12T23:46:13.833 回答