mySQL VARCHAR(256)+ mySQL INT =多少字节?

时间:2013-02-12 23:42:45

标签: mysql database int varchar utf-16

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

请告知

2 个答案:

答案 0 :(得分:1)

UTF 16在MySQL中使用32 bits per character(4个字节)。 4 x 256> 767

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

答案 1 :(得分:1)

在UTF8中,它需要3 x 256 + 4 = 772个字节。 UTF16将再增加25%。

你不应该使用那么宽的主键;为了使索引有效,每个索引的存储应保持最小。

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

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

如果必须使用Unicode并且哈希不在图片中,则应将列缩小为UTF8(250个字符)或UTF16(190个字符)