相关疑难解决方法(0)

#1071 - 指定密钥太长; 最大密钥长度为767字节

当我执行以下命令时:

ALTER TABLE `mytable` ADD UNIQUE (
`column1` ,
`column2`
);
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

#1071 - Specified key was too long; max key length is 767 bytes
Run Code Online (Sandbox Code Playgroud)

有关column1和column2的信息:

column1 varchar(20) utf8_general_ci
column2  varchar(500) utf8_general_ci
Run Code Online (Sandbox Code Playgroud)

我认为varchar(20)只需要21个字节,而varchar(500)只需要501个字节.所以总字节数是522,小于767.那么为什么我会得到错误信息呢?

#1071 - Specified key was too long; max key length is 767 bytes
Run Code Online (Sandbox Code Playgroud)

mysql varchar byte mysql-error-1071

521
推荐指数
23
解决办法
57万
查看次数

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

script/generate acts_as_taggable_on_migration
rake db:migrate
Run Code Online (Sandbox Code Playgroud)

原因

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`)
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

这是我的数据库编码:

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 …
Run Code Online (Sandbox Code Playgroud)

mysql sql indexing ruby-on-rails mysql-error-1071

25
推荐指数
1
解决办法
6万
查看次数

在Rails迁移中创建索引时如何限制字段长度?

我有一个迁移,它使用add_index以下内容为现有表添加索引:

add_index :foo, [:foo_type, :bar_id, :baz_id], :unique => true
Run Code Online (Sandbox Code Playgroud)

但是,我的字段足够长,超过了最大的InnoDB密钥长度.根据Anders Arpteg如何增加MySQL 5.1密钥长度的回答,我需要像这样生成SQL:

CREATE UNIQUE INDEX `index_matches_on_foo_and_bar_id_and_baz_id` ON `matches` (`foo`(100), `bar_id`(100), `baz_id`(100))
Run Code Online (Sandbox Code Playgroud)

我可以用漂亮的Rails-y方式做到这一点,还是我必须坚持在迁移中使用原始SQL?

ruby-on-rails

4
推荐指数
3
解决办法
2784
查看次数

标签 统计

mysql ×2

mysql-error-1071 ×2

ruby-on-rails ×2

byte ×1

indexing ×1

sql ×1

varchar ×1