cakephp3在phpmyadmin问题中创建i18n表

deikduxw  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(431)

我在为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吗?
谢谢你的帮助。

zy1mlcev

zy1mlcev1#

我的请求仅限于:
模型varchar(85)不为空,字段varchar(85)不为空,
模型和领域在85,我认为这是足够的,我接受它。
希望这能帮助别人。

a7qyws3x

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前缀

相关问题