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

26 篇文章 0 订阅
25 篇文章 0 订阅

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

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

收工,吃饭。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中的枚类型是一种特殊的数据类型,用于表示一个有限数量的离散值集合。在Java中,可以使用JDBC连接MySQL数据库并操作枚类型。以下是使用Java访问MySQL类型的基本步骤: 1. 导入JDBC相关的类库,例如mysql-connector-java.jar等。 2. 使用JDBC连接MySQL数据库。 3. 编写SQL语句,创建包含枚类型的表或查询包含枚类型数据。 4. 执行SQL语句并解析结果集。 5. 对枚类型进行操作,例如获取枚值、添加新的枚值等。 下面是一个简单的Java程序示例,用于访问MySQL类型: ``` import java.sql.*; public class EnumExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "username"; String password = "password"; try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement()) { // 创建包含枚类型的表 stmt.executeUpdate("CREATE TABLE mytable (id INT PRIMARY KEY, color ENUM('RED', 'GREEN', 'BLUE'))"); // 插入类型数据 stmt.executeUpdate("INSERT INTO mytable VALUES (1, 'RED')"); stmt.executeUpdate("INSERT INTO mytable VALUES (2, 'GREEN')"); stmt.executeUpdate("INSERT INTO mytable VALUES (3, 'BLUE')"); // 查询枚类型数据 ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); while (rs.next()) { int id = rs.getInt("id"); String color = rs.getString("color"); System.out.println("id: " + id + ", color: " + color); } // 修改枚类型数据 stmt.executeUpdate("UPDATE mytable SET color = 'GREEN' WHERE id = 1"); // 删除枚类型数据 stmt.executeUpdate("DELETE FROM mytable WHERE id = 3"); // 关闭结果集和语句 rs.close(); stmt.close(); } catch (SQLException e) { System.err.println(e.getMessage()); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值