Cakephp 3在phpmyadmin问题

时间:2018-01-06 01:08:19

标签: mysql cakephp indexing internationalization cakephp-3.x

我有一个问题是为CakePHP 3翻译行为创建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_unicode_ci。我应该去找utf8_general_ci吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

finallyutf8_unicode之间的尺寸要求没有差异,它们仅在排序方面有所不同。

默认情况下,InnoDB表的索引(键前缀)限制为767字节(MyISAM为1000字节),如果适用,启用utf8_general选项(默认情况下从MySQL 5.7开始启用),这会提高限制为3072字节,或使innodb_large_prefix列更小,和/或更改其排序规则,VARCHAR列(包含ISO区域设置/国家/地区代码)肯定不使用unicode字符,并且机会很大您的模型和列/字段名称也只使用ASCII字符,并且它们的名称长度低于255个字符。

使用ASCII排序规则,locale列每个字符只需要1个字节,与UTF-8不同,UTF-8可能需要最多3个字节(或VARCHAR个变体的4个字节)已经导致超出索引大小限制(3 * 255 * 2 = 1530)。

另见

答案 1 :(得分:0)

我限制了我的请求:

model varchar(85)NOT NULL, field varchar(85)NOT NULL,

模型和字段在85,我认为它是应该的,我mysql接受它。

希望能帮助别人。