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
请告知
答案 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个字符)