怎么解决数据库ERROR 1071 (42000)报错问题
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"怎么解决数据库ERROR 1071 (42000)报错问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细
千家信息网最后更新 2026年10月31日怎么解决数据库ERROR 1071 (42000)报错问题
本篇内容介绍了"怎么解决数据库ERROR 1071 (42000)报错问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
今天在对一张表加索引时候出现如下报错:
mysql> ALTER TABLE ym_sys_dict ADD INDEX idx_dcode_dvalue (`dict_code`, `dict_value`);ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
查阅文档时候,看到如下解释:
"For CHAR, VARCHAR, BINARY, and VARBINARY columns, indexes can be created that use only the leading part of column values, using col_name(length) syntax to specify an index prefix length. ... Prefixes can be up to 1000 bytes long (767 bytes for InnoDB tables). Note that prefix limits are measured in bytes, whereas the prefix length in CREATE TABLE statements is interpreted as number of characters ...">>>对于myisam和innodb存储引擎,prefixes的长度限制分别为1000 bytes和767 bytes。注意prefix的单位是bytes,但是建表时我们指定的长度单位是字符。 A utf8 character can use up to 3 bytes. Hence you cannot index columns or prefixes of columns longer than 333 (MyISAM) or 255 (InnoDB) utf8 characters. >>以utf8字符集为例,一个字符占3个bytes。因此在utf8字符集下,对myisam和innodb存储引擎创建索引的单列长度不能超过333个字符和255个字符
mysql索引长度限制:
1)单列索引:
mysql 在创建单列索引的时候对列的长度是有限制的 myisam和innodb存储引擎下长度限制分别为1000 bytes和767 bytes。(注意bytes和character的区别)
2) 组合索引:
对于innodb存储引擎,多列索引的长度限制如下:每个列的长度不能大于767 bytes;所有组成索引列的长度和不能大于3072 bytes
smallint 占2个bytes,timestamp占4个bytes,utf8字符集。utf8字符集下,一个character占三个byte。
对于这个问题,解决方法有两个:
1)修改参数innodb_large_prefix,该参数默认为OFF,修改为ON
mysql> show variables like 'innodb_large_prefix';+---------------------+-------+| Variable_name | Value |+---------------------+-------+| innodb_large_prefix | OFF |+---------------------+-------+
2)修改字段长度
查看表结构:
mysql> show create table ym_sys_dict \G*************************** 1. row *************************** Table: ym_sys_dictCreate Table: CREATE TABLE `ym_sys_dict` ( `id` int(20) NOT NULL AUTO_INCREMENT, `dict_name` varchar(100) NOT NULL COMMENT '字典名称', `dict_type` varchar(100) NOT NULL COMMENT '字典类型', `dict_code` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `dict_value` varchar(1000) DEFAULT NULL, `order_num` int(11) DEFAULT '0' COMMENT '排序', `remark` varchar(255) DEFAULT ' ' COMMENT '备注', `del_flag` tinyint(4) DEFAULT '0' COMMENT '删除标记 -1:已删除 0:正常', PRIMARY KEY (`id`), UNIQUE KEY `dict_type` (`dict_type`,`dict_code`)) ENGINE=InnoDB AUTO_INCREMENT=93 DEFAULT CHARSET=utf8 COMMENT='数据字典表'
经和开发沟通,dict_value字段长度设置过长,改字段长度为100
alter table ym_sys_dict modify dict_value varchar(100);
然后可以正常添加索引
mysql> ALTER TABLE ym_sys_dict ADD INDEX idx_dcode_dvalue (`dict_code`, `dict_value`);Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0
"怎么解决数据库ERROR 1071 (42000)报错问题"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
长度
字符
索引
限制
引擎
存储
数据
问题
字典
字段
字符集
时候
数据库
内容
单位
参数
更多
知识
别为
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
江苏根荣互联网科技
科技赋能下的互联网金融
互联网品科技
广州互联网科技公司
科技与互联网发展
善班互联网科技
深圳齐家互联网科技
西安互联网科技公司
互联网科技上市公司
海南科技产业互联网平台
安控科技rtu产品工业互联网
广西互联网科技孵化中心
想开互联网科技公司怎么样
烟台灵鸽互联网科技有限公司
锡山区互联网智能科技产品供应
广州千川互联网科技有限公司
上海互联网科技公司ppt
江苏互联网智能科技产品出厂价
深圳互联网科技园地址
互联网科技创新创业项目
互联网科技
上海挚品互联网科技有限公司
腾讯阿里互联网科技
紫鲸互联网科技
赶超互联网科技 微信多开
用友工业互联网科技发展
伍佰万互联网科技怎么赚钱
富国互联网金融科技混合基金
科技互联网行业投资研究
宁波允成互联网科技有限公司