解决Data truncated for column ‘titleLevel’ at row 1 报错 –解决MySQL数据库添加操作时出现枚举类型导致报错的问题
今天回顾一个模块下的流程的时候,突然脑子一抽想去Navicat中写一下SQL语句,结果添加功能的SQL语句就直接给我报错了,报错截图如下:
这就很奇怪了,项目里面跑都没问题怎么拉出来跑就不行了?
然后稍微排查了一下,发现是数据库的表那边给自己埋了坑:
该字段是
枚举类型
的,而我拉出来以后为了测试想插入的数据是这样的:
而我写出来的SQL语句是这样的:
所以问题就找到了,原因在于原本的titleLevel字段用的枚举类型,再看看数据库表中原本的信息:
该字段有初中正高副高级的等级,所以我就把超高级字段改成正高级:
这次就插入成功了
因为枚举类型的特性,我们只能在已有的值中选择,如果实在想改的话,可以在这里加:
加完保存一下,然后再插入:
超高级添加成功,说明起作用了。
好了至此问题解决了,是枚举的锅。
但是如果没有趁手的图形化管理工具,怎么直接通过SQL语句添加想要的选项呢?而后我又去百度一下如何通过SQL语句来修改该枚举字段的值,结果发现大佬们写的一个比一个难,建新表然后锁表然后再COPY啥啥的,看的一脸蒙圈。
然后我就想能不能有个简单的方法添加枚举的选项呢?所以根据自己个人的猜测试一下如何修改:首先Enum在表中作为一个类型存在,然后我去CMD中查看了一下表结构,结果发现enum类型是附带默认选项的值的,所以我试着修改一下该字段:
SQL语句为:
alter table t_joblevel modify column titleLevel enum('正高级','副高级','中级','初级','员级','超高级','超弩级') COMMENT '职称等级';
直接用Alter修改该字段的类型,然后给上想添加的选项,直接修改成功。
其实项目中不报错是因为职称等级本来就被设置作为选择项选择的,数据库这么设计是有它的道理的。
但是能多学到这么一个点有所收获就很舒服了,保不准以后碰上了就能用上。
收工,吃饭。