当我执行以下命令时:
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) 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) 我有一个完整的操作区域设置django应用程序,但我在迁移到site5服务器时遇到麻烦.
当我启动django的syncdb命令时,我的所有模型表都被创建了,但是(我猜它在创建关系表时),我得到以下错误:
_mysql_exceptions.OperationalError: (1071, 'Specified key was too long; max key length is 1000 bytes')
Run Code Online (Sandbox Code Playgroud)
当我要求django同步locale db时,我没有任何问题,此错误仅发生在服务器中...
任何的想法?
mysql> create table newsgroup(
-> id integer unsigned NOT NULL AUTO_INCREMENT,
-> creater integer unsigned NOT NULL,
-> coremember integer unsigned DEFAULT NULL,
-> name varchar(300) not null unique,
-> description text,
-> created datetime not null,
-> PRIMARY KEY (id)
-> );
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
mysql>
Run Code Online (Sandbox Code Playgroud)
我换300了250,没关系.但我真的不明白.
我有一个表MySQL有3个字段,我想强制两个字段之间的唯一性.这是表格DDL:
CREATE TABLE `CLIENT_NAMES` (
`ID` int(11) NOT NULL auto_increment,
`CLIENT_NAME` varchar(500) NOT NULL,
`OWNER_ID` int(11) NOT NULL,
PRIMARY KEY (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
该ID字段是代理键(此表正在加载ETL).该CLIENT_NAME字段包含客户端名称.id OWNER_ID是指示客户所有者.
我以为我可以用一个唯一索引执行本CLIENT_NAME和OWNER_ID,
ALTER TABLE `DW`.`CLIENT_NAMES`
ADD UNIQUE INDEX enforce_unique_idx(`CLIENT_NAME`, `OWNER_ID`);
Run Code Online (Sandbox Code Playgroud)
但是MySQL给了我一个错误:
执行SQL命令以更新表时出错.指定密钥太长; 最大密钥长度为765字节(错误1071)
其他人有什么想法吗?
我使用的是mysql 5.0.91,我需要保存URL(有些很小,有些很长).我想使用,varchar(2000)但我收到一个错误:
#1071 - 指定密钥太长; 最大密钥长度为1000字节
使用mysql 5.0.91在我的主机上保存URL的最佳方法是什么?
在服务器1上转储mysql数据库
$ mysql --version
mysql Ver 14.14 Distrib 5.1.54, for debian-linux-gnu (x86_64) using readline 6.2
$ mysqldump -u root -p db > db.sql
Run Code Online (Sandbox Code Playgroud)
在服务器2上导入
$ mysql --version
mysql Ver 14.12 Distrib 5.0.95, for unknown-linux-gnu (x86_64) using readline 5.1
$ mysql -u root -p db < db.sql
ERROR 1071 (42000) at line 807: Specified key was too long; max key length is 1000 bytes
Run Code Online (Sandbox Code Playgroud)
我知道这个错误有很多问题和答案,但它仍然让我感到困惑.
可以是版本问题吗?我怀疑没有.
如果我使用--force选项运行它,它会变得更加危险:
ERROR 1071 (42000) at line 807: Specified key was too long; max key length …Run Code Online (Sandbox Code Playgroud)