• ADADADADAD

    怎么解决数据库ERROR 1071 (42000)报错问题[ mysql数据库 ]

    mysql数据库 时间:2024-11-26 22:13:11

    作者:文/会员上传

    简介:

    今天在对一张表加索引时候出现如下报错: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
    怎么解决数据库ERROR 1071 (42000)报错问题.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: 数据库