解决Data truncated for column ‘titleLevel’ at row 1 报错 --解决MySQL数据库添加操作时出现枚举类型导致报错的问题

今天回顾一个模块下的流程的时候,突然脑子一抽想去Navicat中写一下SQL语句,结果添加功能的SQL语句就直接给我报错了,报错截图如下:
MySQL枚举类型数据插入踩坑实录
这就很奇怪了,项目里面跑都没问题怎么拉出来跑就不行了?
然后稍微排查了一下,发现是数据库的表那边给自己埋了坑:
MySQL枚举类型数据插入踩坑实录
该字段是枚举类型的,而我拉出来以后为了测试想插入的数据是这样的:
MySQL枚举类型数据插入踩坑实录

而我写出来的SQL语句是这样的:MySQL枚举类型数据插入踩坑实录
所以问题就找到了,原因在于原本的titleLevel字段用的枚举类型,再看看数据库表中原本的信息:
MySQL枚举类型数据插入踩坑实录
该字段有初中正高副高级的等级,所以我就把超高级字段改成正高级:
MySQL枚举类型数据插入踩坑实录
这次就插入成功了
因为枚举类型的特性,我们只能在已有的值中选择,如果实在想改的话,可以在这里加:
MySQL枚举类型数据插入踩坑实录
加完保存一下,然后再插入:
MySQL枚举类型数据插入踩坑实录
超高级添加成功,说明起作用了。

好了至此问题解决了,是枚举的锅。

但是如果没有趁手的图形化管理工具,怎么直接通过SQL语句添加想要的选项呢?而后我又去百度一下如何通过SQL语句来修改该枚举字段的值,结果发现大佬们写的一个比一个难,建新表然后锁表然后再COPY啥啥的,看的一脸蒙圈。
然后我就想能不能有个简单的方法添加枚举的选项呢?所以根据自己个人的猜测试一下如何修改:首先Enum在表中作为一个类型存在,然后我去CMD中查看了一下表结构,结果发现enum类型是附带默认选项的值的,所以我试着修改一下该字段:

MySQL枚举类型数据插入踩坑实录

SQL语句为:

alter table t_joblevel modify column titleLevel enum('正高级','副高级','中级','初级','员级','超高级','超弩级') COMMENT '职称等级';

直接用Alter修改该字段的类型,然后给上想添加的选项,直接修改成功。

其实项目中不报错是因为职称等级本来就被设置作为选择项选择的,数据库这么设计是有它的道理的。
但是能多学到这么一个点有所收获就很舒服了,保不准以后碰上了就能用上。

收工,吃饭。

相关文章:

  • 2021-05-11
  • 2022-01-26
  • 2021-04-06
  • 2022-12-23
  • 2021-05-16
  • 2022-12-23
  • 2021-11-03
猜你喜欢
  • 2021-11-19
  • 2022-01-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案