2013-10-02 58 views
1

自動設置我有以下的MyISAM表MySQL索引的前綴長度在Ubuntu

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前綴length.So我的問題是,它是如何發生的那樣?是否有需要在MacOS my.cnf上設置的配置變量以獲得相同的結果?

+0

您是否在兩個系統上運行完全相同的主/次/發行版本的MySQL?涉及哪些版本? –

+0

關於ubuntu的mysql版本是:5.5.32-0ubuntu0.12.04.1,MacOS版本是5.6.12,我在http://pastebin.com/cppRZHQs上粘貼了詳細信息 – Fajarmf

回答

0

您的列大小太大而無法編制索引。

前綴最長可達1000個字節(InnoDB表格爲767個字節)。

這是MySQL限制,而不是特定的OS(但很具體的存儲引擎)

你能顯示出對MacOS的表的詳細信息。

MySQL reference