Py学习  »  DATABASE

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

c00000fd • 6 年前 • 1689 次点击  

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

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

错误本身:

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38929
文章 [ 2 ]  |  最新文章 6 年前
sticky bit
Reply   •   1 楼
sticky bit    6 年前

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

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

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

Gordon Linoff
Reply   •   2 楼
Gordon Linoff    6 年前

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

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

CREATE TABLE tbl (
    idx TINYTEXT,
    PRIMARY KEY (idx(63))
);