帝国cms报错Duplicate entry 'xxx' for key 'tagname'
优采云 发布时间: 2022-10-10 18:02我们在客服过程中,收到不少关于帝国cms发布失败的反馈,报错信息为:
Duplicate entry 'xxx' for key 'tagname'
insert into ***_enewstags(tagname,num,isgood,cid) values('xxx',1,0,0);
这个问题是在保存tags标签的环节出现的,它造成的影响:1. 文章发布在此处中断,文章主体内容保存完成,但tags标签没有保存完,后面还有静态HTML生成和百度推送都没有执行,严重影响网站更新。
2. 由于被中断,优采云这边无法收到正常的发布完成信号,导致优采云误认为文章保存失败,会发出很多站内通知,暂存库也会堆积大量暂存文章,造成管理麻烦。
鉴于上述问题频发,我们调试检查了帝国cms,最终发现根本原因是:帝国cms数据库enewstags表tagname这个字段默认的最大允许长度仅有20个字节,在GBK编码下就是10个汉字,在UTF-8编码下则只能存入6个汉字,这实在是太短了。
发现这个问题后,我们考虑了在接口文件中强制截断tags标签到20字节,但这会导致很多用户的tag标签不完整,所以放弃了。
如果您是用的帝国cms,强烈建议把此长度加长,比如改到100,就能极大程度减少这个问题的发生。操作方法如下:
1. 在PHPmyadmin中找到数据表**_enewstags,点击后面的的“结构”按钮。
2. 在结构页面可以看到tagname字段的格式为char(20),即表示20个字节,我们需要修改的就是它。点击后面的“修改”按钮:
3. 在修改界面,把长度/值对应的框(下图第三个框)中的20改为100,然后点击右下角保存按钮就可以了。