代码之家  ›  专栏  ›  技术社区  ›  c00000fd

在tinytext列上使用主键创建表导致错误:mysql 1071'指定的键太长;最大键长度为255字节'

  •  1
  • c00000fd  · 技术社区  · 5 年前

    我已经有一段时间没有编写PHP了。我的网站,我以前用PHP编写的,它是从一家共享的主机公司运行的,当脚本通过 mysql_query :

    CREATE TABLE tbl (idx TINYTEXT, PRIMARY KEY(idx(255)))
    

    错误本身:

    mysql 1071'指定的密钥太长;最大密钥长度为255字节'

    它工作了很多年。现在有什么问题?

    1 回复  |  直到 5 年前
        1
  •  0
  •   Gordon Linoff    5 年前

    如果最大密钥长度为255字节,并且您使用的是UTF8编码,那么每个字符最多可以是4个字节。

    因此,最大为63字节。这项工作:

    CREATE TABLE tbl (
        idx TINYTEXT,
        PRIMARY KEY (idx(63))
    );
    
        2
  •  0
  •   sticky bit    5 年前

    您可以查询目录,尤其是 information_schema.character_sets table 获取给定字符集中字符的最大长度。从中可以计算不超过255字节的最大字符数。

    SELECT floor(255 / maxlen) maxcharlen
           FROM information_schema.character_sets
           WHERE character_set_name = @@character_set_database;
    

    然后你可以修改你的 CREATE 基于该值的语句。