【问题标题】:mysql index prefix length is automatically set in ubuntumysql索引前缀长度在ubuntu中自动设置
【发布时间】:2013-10-02 22:15:30
【问题描述】:

我有以下 MyISAM 表

mysql> show create table product_desc\G
*************************** 1. row ***************************
       Table: product_desc
Create Table: CREATE TABLE `product_desc` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `product_id` int(10) unsigned DEFAULT '0',
  `title` varchar(100) DEFAULT NULL,
  `description` varchar(5000) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `title` (`title`,`description`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

但是,当我想使用以下命令更改表(添加索引)时,我得到了错误。

mysql> ALTER TABLE product_desc ADD INDEX `description` (`description`);
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

奇怪的是,这只发生在 Mac OSX 上,而不是在我的 ubuntu 服务器上。所以我检查了我服务器上的结果表并得到了这个:

mysql> show indexes from product_desc;
+------------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table        | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+------------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| product_desc |          0 | PRIMARY     |            1 | id          | A         |           5 |     NULL | NULL   |      | BTREE      |         |               |
| product_desc |          1 | description |            1 | description | A         |           5 |      333 | NULL   | YES  | BTREE      |         |               |
| product_desc |          1 | title       |            1 | title       | NULL      |           1 |     NULL | NULL   | YES  | FULLTEXT   |         |               |
| product_desc |          1 | title       |            2 | description | NULL      |           1 |     NULL | NULL   | YES  | FULLTEXT   |         |               |
+------------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
6 rows in set (0.00 sec)

有趣的是,description 索引自动获得 333 前缀长度。所以我的问题是它是如何发生的?为了获得相同的结果,我需要在 MacOS my.cnf 上设置任何配置变量吗?

【问题讨论】:

  • 您是否在两个系统上运行完全相同的主要/次要/发布版本的 MySQL?涉及哪些版本?
  • ubuntu mysql 版本为:5.5.32-0ubuntu0.12.04.1,MacOS 版本为 5.6.12,我将详细信息粘贴在pastebin.com/cppRZHQs

标签: mysql macos ubuntu indexing mysqldump


【解决方案1】:

您的列太大而无法编入索引。

前缀最长可达 1000 字节(InnoDB 表为 767 字节)。

这是一个 MySql 限制,不是特定于操作系统(而是特定于存储引擎)

您能否在 MacOS 上显示表格详细信息。

MySQL reference

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    相关资源
    最近更新 更多