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

  • Post author:
  • Post category:mysql




解决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修改该字段的类型,然后给上想添加的选项,直接修改成功。

其实项目中不报错是因为职称等级本来就被设置作为选择项选择的,数据库这么设计是有它的道理的。

但是能多学到这么一个点有所收获就很舒服了,保不准以后碰上了就能用上。

收工,吃饭。



版权声明:本文为qq_37807821原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。