我刚刚尝试使用PHP7和mysqli在MariaDB中创建下表:
CREATE TABLE $tb_bad_log (
ip varchar(255) NOT NULL default '',
name varchar(255) default NULL,
nr_tries int(1) NOT NULL default '0',
last_try varchar(255) NOT NULL default '',
blocked enum('Y','N') NOT NULL default 'N',
enter_user varchar(255) NOT NULL default '',
PRIMARY KEY (enter_user),
KEY nr_tries (nr_tries),
KEY blocked (blocked)
);
这给我的错误是“指定的密钥太长; “最大密钥长度为767字节”,如果enter_user
为192个或更多字符,则持续存在,但如果我将其限制为191个或更少,则不存在。这是怎么回事?
(是的,这里发生了一些奇怪的事情。我试图理解遗留代码并使其运行。)
答案 0 :(得分:2)
您的数据库字符集很可能设置为utf8mb4
,这意味着每个char
将占用4个字节。因此,192
个字符需要768
个字节的键空间,使其太大。如果不需要特定表或列上的utf8mb4
,则可以在table level或the column level上使用CHARACTER SET
参数设置字符集。