12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-11-26 22:13:11
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
今天在对一张表加索引时候出现如下报错:mysql>ALTERTABLEym_sys_dictADDINDEXidx_dcode_dvalue(`dict_code`,`dict_value`);ERROR1071(42000):Specifiedkeywastoolong;maxkey
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
今天在对一张表加索引时候出现如下报错:
mysql>ALTERTABLEym_sys_dictADDINDEXidx_dcode_dvalue(`dict_code`,`dict_value`);ERROR1071(42000):Specifiedkeywastoolong;maxkeylengthis767bytes
查阅文档时候,看到如下解释:
"ForCHAR,VARCHAR,BINARY,andVARBINARYcolumns,indexescanbecreatedthatuseonlytheleadingpartofcolumnvalues,usingcol_name(length)syntaxtospecifyanindexprefixlength....Prefixescanbeupto1000byteslong(767bytesforInnoDBtables).Notethatprefixlimitsaremeasuredinbytes,whereastheprefixlengthinCREATETABLEstatementsisinterpretedasnumberofcharacters...">>>对于myisam和innodb存储引擎,prefixes的长度限制分别为1000bytes和767bytes。注意prefix的单位是bytes,但是建表时我们指定的长度单位是字符。Autf8charactercanuseupto3bytes.Henceyoucannotindexcolumnsorprefixesofcolumnslongerthan333(MyISAM)or255(InnoDB)utf8characters.>>以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>showvariableslike'innodb_large_prefix';+---------------------+-------+|Variable_name|Value|+---------------------+-------+|innodb_large_prefix|OFF|+---------------------+-------+
2)修改字段长度
查看表结构:
mysql>showcreatetableym_sys_dict\G***************************1.row***************************Table:ym_sys_dictCreateTable:CREATETABLE`ym_sys_dict`(`id`int(20)NOTNULLAUTO_INCREMENT,`dict_name`varchar(100)NOTNULLCOMMENT'字典名称',`dict_type`varchar(100)NOTNULLCOMMENT'字典类型',`dict_code`varchar(100)CHARACTERSETutf8COLLATEutf8_binDEFAULTNULL,`dict_value`varchar(1000)DEFAULTNULL,`order_num`int(11)DEFAULT'0'COMMENT'排序',`remark`varchar(255)DEFAULT''COMMENT'备注',`del_flag`tinyint(4)DEFAULT'0'COMMENT'删除标记-1:已删除0:正常',PRIMARYKEY(`id`),UNIQUEKEY`dict_type`(`dict_type`,`dict_code`))ENGINE=InnoDBAUTO_INCREMENT=93DEFAULTCHARSET=utf8COMMENT='数据字典表'
经和开发沟通,dict_value字段长度设置过长,改字段长度为100
altertableym_sys_dictmodifydict_valuevarchar(100);
然后可以正常添加索引
mysql>ALTERTABLEym_sys_dictADDINDEXidx_dcode_dvalue(`dict_code`,`dict_value`);QueryOK,0rowsaffected(0.01sec)Records:0Duplicates:0Warnings:0
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19