我有一个问题是为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说:
我在uft8_unicode_ci。我应该去找utf8_general_ci吗?
感谢您的帮助。
答案 0 :(得分:0)
finally
和utf8_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接受它。
希望能帮助别人。