我在为cakephp3translate行为创建i18n表时遇到问题。所以我的数据库在phpmyadmin中,当我想执行官方食谱中的这段代码时:
CREATE TABLE i18n (
id int NOT NULL auto_increment,
locale varchar(6) NOT NULL,
model varchar(255) NOT NULL,
foreign_key int(10) NOT NULL,
field varchar(255) NOT NULL,
content text,
PRIMARY KEY (id),
UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field),
INDEX I18N_FIELD(model, foreign_key, field)
);
phpmyadmin说:
1071-指定的密钥太长;最大密钥长度为767字节
我在uft8\u\u ci。我应该去utf8\U general\U ci吗?
谢谢你的帮助。
2条答案
按热度按时间zy1mlcev1#
我的请求仅限于:
模型varchar(85)不为空,字段varchar(85)不为空,
模型和领域在85,我认为这是足够的,我接受它。
希望这能帮助别人。
a7qyws3x2#
在尺寸要求上,两者没有区别
utf8_unicode
以及utf8_general
,它们只在排序方面有所不同。默认情况下,innodb表的索引(键前缀)限制为767字节(myisam为1000字节),如果适用,请启用
innodb_large_prefix
选项(MySQL5.7默认启用),将限制提高到3072字节,或使VARCHAR
列越小,和/或更改其排序规则locale
列(包含iso地区/国家代码)肯定不会使用unicode字符,而且很可能您的模型和列/字段名称也只使用ascii字符,而且它们的名称长度远低于255个字符。使用ascii排序规则
VARCHAR
列每个字符只需要1个字节,这与utf-8不同,utf-8最多需要3个字节(或每个字符需要4个字节)mb4
变量),这已经导致超过索引大小限制(32552=1530)。另请参见
MySQL5.7手册>字符集和排序规则
MySQL5.7手册>innodb表限制>最大值和最小值
MySQL5.7手动>innodb启动选项和系统变量>innodb\u大\u前缀