mysql - 如何规避 mySQL 中的最大 key 长度?

标签 mysql mysql-error-1071

我正在创建一个表,索引分布在各个文件中的大量测量值。在不同的表中,对于不同类型的数据,我使用数据文件的绝对路径作为唯一索引。这非常有效。

但是,当我现在尝试在新表中重现该设置时,我得到

mysql> alter table weights change column path path varchar(1000); ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

这很奇怪,因为我的另一个表中的同一列的特征为:

| Field               | Type          | Null | Key | Default | Extra |
+---------------------+---------------+------+-----+---------+-------+
| path                | varchar(1000) | YES  | UNI | NULL    |       |

那么,我上次是如何绕过这个限制的呢?我应该告诉你,自从创建第一个表以来我已经重新安装了linux(和mySQL),因此很可能一些默认值在我不知情的情况下被更改了。

当我启动 mySQL 时,欢迎消息是:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 128
Server version: 5.5.22-0ubuntu1 (Ubuntu)

当我搜索以前的答案时,一般的回答似乎是“好吧,事情就是这样”,但显然不是这样?

提前谢谢你:)

最佳答案

检查主键的定义 - 您可能在第一个表上使用了部分前缀键索引。

总体而言,更好的解决方案是使用文件路径的哈希值作为主键,并将文件路径本身存储在另一列中。

关于mysql - 如何规避 mySQL 中的最大 key 长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801773/

相关文章:

mysql - 将 2 个表与另一个表上的 OUTER JOIN 组合起来

mysql日期范围,较大日期在较小日期之前

mysql - 在 MySQL 中强制执行唯一行

character-encoding - mysql key 太长问题

mysql - #1071 - 指定的 key 太长;最大 key 长度为 767 字节

mysql - MariaDB 10.1 中 DELETE 语法错误的未知原因

PHP MySQL : Fetching all associated rows from multiple tables using one query?

mysql - 根据条件按不同字段排序

MySQL 错误 #1071 - 指定的 key 太长;最大 key 长度为 767 字节