首页 > 解决方案 > Varchar PRIMARY_KEY 不能长于 191

问题描述

我只是尝试使用 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 个字符或更少,则不会。这里发生了什么?

(是的,这里发生了一些奇怪的事情。我正在尝试理解遗留代码并让它运行。)

标签: mariadbprimary-keyvarchar

解决方案


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


推荐阅读