Mysql :: Error:指定的键太长;最大密钥长度为1000字节

script/generate acts_as_taggable_on_migration
rake db:migrate

原因

Mysql::Error: Specified key was too long; max key length is 1000 bytes: CREATE  INDEX `index_taggings_on_taggable_id_and_taggable_type_and_context` ON `taggings` (`taggable_id`, `taggable_type`, `context`)

我该怎么办?

这是我的数据库编码:

mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | latin1 | 
| character_set_connection | latin1 | 
| character_set_database   | utf8   | 
| character_set_filesystem | binary | 
| character_set_results    | latin1 | 
| character_set_server     | latin1 | 
| character_set_system     | utf8   | 
+--------------------------+--------+
7 rows in set (0.00 sec)
这只是一个MySQL问题 –

MySQL有不同的引擎 – MyISAM,InnoDB,内存…

MySQL has different limits on the amount of space you can use to define indexes on column(s) – for MyISAM it’s 1,000 bytes; it’s 767 for InnoDB.这些列的数据类型很重要 – 对于VARCHAR,它是3x,所以VARCHAR(100)上的索引将占用这些字节的300个(因为100个字符* 3 = 300)。

为了适应某些索引,当您达到上限值时,可以根据列数据类型的部分定义索引:

CREATE INDEX example_idx ON YOUR_TABLE(your_column(50))

假设your_column是VARCHAR(100),上述示例中的索引将仅在前50个字符。搜索超过第50个字符的数据将无法使用索引。

翻译自:https://stackoverflow.com/questions/3489041/mysqlerror-specified-key-was-too-long-max-key-length-is-1000-bytes

转载注明原文:Mysql :: Error:指定的键太长;最大密钥长度为1000字节