Varchar PRIMARY_KEY不能超过191

时间:2018-08-20 15:54:31

标签: mariadb primary-key varchar

我刚刚尝试使用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个或更少,则不存在。这是怎么回事?

(是的,这里发生了一些奇怪的事情。我试图理解遗留代码并使其运行。)

1 个答案:

答案 0 :(得分:2)

您的数据库字符集很可能设置为utf8mb4,这意味着每个char将占用4个字节。因此,192个字符需要768个字节的键空间,使其太大。如果不需要特定表或列上的utf8mb4,则可以在table levelthe column level上使用CHARACTER SET参数设置字符集。

相关问题