广告
返回顶部
首页 > 资讯 > 数据库 >mysql enum字段类型的谨慎使用
  • 901
分享到

mysql enum字段类型的谨慎使用

mysqlenum字段类型mysqlenum 2022-07-14 11:07:19 901人浏览 独家记忆
摘要

目录为什么使用枚举枚举类型使用陷阱使用例子:插入数字例子:为什么使用枚举 限定值的取值范围,比如性别(男,女,未知)等。 枚举类型使用陷阱 1.超级不推荐在Mysql中设置某一字段类型为enum,但是存的值为数字,比如&

为什么使用枚举

限定值的取值范围,比如性别(男,女,未知)等。

枚举类型使用陷阱

1.超级不推荐在Mysql中设置某一字段类型为enum,但是存的值为数字,比如‘0’,‘1’,‘2’;

  • 解释1:你会混淆,因为enum可以通过角标取值,但它的角标是从1开始,对于不熟悉这个字段的人这里会出错
  • 解释2:enum类型的字段对于0与‘0’有非常大的区别,如果你是用0当角标做操作,因它没有这个角标,所要会报错;如果你使用‘0’这个值去取枚举值,并做插入操作,你会发现它竟然会成功,但是插入的结果是一个“空”(不是null)
  • 解释3:enum类型对于PHP等弱语言类型的支持很差,弱语言类型打引号和不打引号的值可能是同一类型,但是对于mysql中enum类型的字段来说,那就不一定是一回事了

结论:总之,不要拿mysql的enum类型取存一些数字;如果你一定要使用这个字段去存数字,请把这个字段定义为int,然后在Java代码中使用枚举类做一个对于这个字段值范围的一个限定!(后面有代码)

2.你可能会报这个错——Caused by: java.sql.SQLException: Data truncated for column 'Color' at row 1  ;

  • 原因:Jpa默认使用整数顺序值持久化枚举类型;
  • Mysql中枚举类型Color定义取值的顺序是RED、GREEN、BLUE,因此,当这三个取值持久化到数据库表时,取值分别是0、1、2;
  • 意思就是我们这里存往数据库的数据是0、1、2这样的数字,而不是RED、GREEN、BLUE字符串, 但是Mysql数据库中定义的是RED、GREEN、BLUE,并没有其它值所以报错

解决:在entity中使用@Enumerated(EnumType.STRING)标注你的枚举类型属性,如果标注,默认是integer

使用例子:

建表语句为

 CREATE TABLE test4 (  
     id BIGINT UNSIGNED  PRIMARY KEY AUTO_INCREMENT,  
     brand VARCHAR(255) NOT NULL,  
     color ENUM('RED','GREEN','BLUE')
  ) ENGINE = InnoDB; 

Java代码中,枚举类

public enum Color {
     RED,  
     GREEN,  
     BLUE  
}

Java代码中,Javabean

@Entity  
@Table(name="test4") 
public class ClothesRight {
    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    private Long id;  
    
    @Enumerated(EnumType.STRING)
    private Color color;  
    
    private String brand;
 
    public Long getId() {
        return id;
    }
 
    public void setId(Long id) {
        this.id = id;
    }
 
    public String getBrand() {
        return brand;
    }
 
    public void setBrand(String brand) {
        this.brand = brand;
    }
 
    public ClothesRight(Long id, Color color, String brand) {
        super();
        this.id = id;
        this.color = color;
        this.brand = brand;
    }
 
    public Color getColor() {
        return color;
    }
 
    public void setColor(Color color) {
        this.color = color;
    }
 
    public ClothesRight() {
        super();
    }
    
}

简单使用:

public interface Test4RightRepository extends JpaRepository<ClothesRight, Long>{
 
}
@Autowired
    private Test4RightRepository t4R;

    @GetMapping(value="/addclothesright")
    public void GetTest4Right(){
        List<ClothesRight> entities = new ArrayList<>();
        ClothesRight clothes = new ClothesRight();  
        //clothes.setId(1L);
        clothes.setBrand("佐丹奴");  
        clothes.setColor(Color.RED); 
        entities.add(clothes);
        t4R.save(entities);
    }

结果为:

mysql enum字段类型的谨慎使用

插入数字例子:

建表

CREATE TABLE test5num (  
    id BIGINT UNSIGNED  PRIMARY KEY AUTO_INCREMENT,  
     used int(11) DEFAULT NULL COMMENT '0:没用过  1:已用过  2:不能用'
 )ENGINE = InnoDB; 

Java代码为:

@Entity
@Table(name="test5num")
public class Test5Num {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    
    private Used used;
 
    public Long getId() {
        return id;
    }
 
    public void setId(Long id) {
        this.id = id;
    }
 
    public Used getUsed() {
        return used;
    }
 
    public void setUsed(Used used) {
        this.used = used;
    }
 
    public Test5Num() {
        super();
    }
 
    public Test5Num(Long id, Used used) {
        super();
        this.id = id;
        this.used = used;
    }
    
}

public enum Used {
	UNUSED(0,"没用过"),
	USED(1,"已用过"),
	FORBIDDEN(2,"不能用");
	
	private Integer code;
	private String discribe;
	public Integer getCode() {
		return code;
	}
	public String getDiscribe() {
		return discribe;
	}
	private Used(Integer code, String discribe) {
		this.code = code;
		this.discribe = discribe;
	}
}

public interface Test5NumRepository extends JpaRepository<Test5Num, Long>{
 
}
@Autowired
    private Test5NumRepository t5N;
       
    @GetMapping("/test5insert")
    public void insertT5(){
        Test5Num t5 = new Test5Num();
        t5.setUsed(Used.USED);
        List<Test5Num> list = new ArrayList<Test5Num>();
        list.add(t5);
        t5N.save(list);
    }

结果:

mysql enum字段类型的谨慎使用

到此这篇关于mysql enum字段类型的谨慎使用的文章就介绍到这了,更多相关mysql enum字段类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: mysql enum字段类型的谨慎使用

本文链接: https://www.lsjlt.com/news/33353.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql enum字段类型的谨慎使用
    目录为什么使用枚举枚举类型使用陷阱使用例子:插入数字例子:为什么使用枚举 限定值的取值范围,比如性别(男,女,未知)等。 枚举类型使用陷阱 1.超级不推荐在mysql中设置某一字段类型为enum,但是存的值为数字,比如&...
    99+
    2022-07-14
    mysqlenum字段类型 mysqlenum
  • mysqlenum字段类型的谨慎使用
    目录为什么使用枚举枚举类型使用陷阱使用例子:插入数字例子:为什么使用枚举 限定值的取值范围,比如性别(男,女,未知)等。 枚举类型使用陷阱 1.超级不推荐在mysql中设置某一字段类...
    99+
    2022-11-13
  • mysql枚举类型enum怎么使用
    在MySQL中,枚举类型(enum)用于定义一个可以选择的值列表。enum类型可以在创建表时定义,也可以在已存在的表中添加。下面是创...
    99+
    2023-08-30
    mysql
  • mysql各种类型的字段
    原文:https://www.cnblogs.com/herd/p/13812943.html...
    99+
    2022-01-21
    mysql各种类型的字段 数据库入门 数据库基础教程
  • Mysql中如何使用date类型字段
    这期内容当中小编将会给大家带来有关Mysql中如何使用date类型字段,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 字符串转日期: 应该...
    99+
    2022-10-18
  • mysql中enum类型的作用是什么
    本篇文章为大家展示了mysql中enum类型的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。说明枚举类型,其值范围需要在创建表时通过枚举显示。enum忽略了大小写。也支持通过下标(从1开始...
    99+
    2023-06-20
  • MySQL之JSON类型字段的使用技巧分享
    目录准备工作jsON对象基础操作JSON数组操作更多操作JSON字段在Java中的实践测试环境: mysql8.0.19 准备工作 CREATE TABLE json_demo ( `id` INT ( 11 ) N...
    99+
    2022-08-25
  • 选择mysql字段类型的方法
    不知道大家之前对类似选择mysql字段类型的方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完选择mysql字段类型的方法你一定会有所收获的。 尽量少的...
    99+
    2022-10-18
  • mysql枚举类型enum的用法是什么
    MySQL的枚举类型(ENUM)是一种数据类型,用于定义一个可以从预定义的取值列表中选择的列。在创建表时,可以使用ENUM来定义列的...
    99+
    2023-08-21
    mysql
  • 使用mybatisplus接收mysql字段为json类型的数据
    一.数据库设计 CREATE TABLE `inv_learning_examination_questions` ( `id` bigint(20) NOT NULL, `title` varchar(255) CHARA...
    99+
    2023-08-31
    sql 数据库
  • mysql怎么修改表字段的类型
    要修改MySQL表中的字段类型,您可以使用ALTER TABLE语句。以下是修改表字段类型的基本语法:ALTER TABLE tab...
    99+
    2023-10-20
    mysql
  • 如何使用mysql数据类型和字段属性
    这篇文章主要为大家展示了如何使用mysql数据类型和字段属性,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。数据类型:mysql的数据类型就是存储数据的类型。数...
    99+
    2022-10-18
  • MySQL中BLOB字段类型的作用是什么
    MySQL中BLOB字段类型的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。BLOB类型的字段用于存储二进制数据MySQL中,BLO...
    99+
    2022-10-18
  • MySQL中JSON字段数据类型怎么用
    本文小编为大家详细介绍“MySQL中JSON字段数据类型怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL中JSON字段数据类型怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言JSON 类型...
    99+
    2023-07-02
  • Mysql修改字段名和修改字段类型的实例代码
    1、修改字段类型、字段名、字段注释、类型长度、字段默认值 mysql修改字段类型: --能修改字段类型、类型长度、默认值、注释 --对某字段进行修改 ALTER TABL...
    99+
    2022-11-13
  • 选择mysql字段类型的具体方法
    不知道大家之前对类似选择mysql字段类型的具体方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完选择mysql字段类型的具体方法你一定会有所收获的。整型时间类型...
    99+
    2022-10-18
  • mysql中json类型字段的基本用法实例
    目录前言基本环境jsON类型字段常用操作插入JSON类型数据查询JSON类型数据更新JSON类型数据中的特定字段匹配JSON类型数据中的特定字段结语前言 mysql从5.7.8版本开始原生支持了JSON类型数据,同时可以...
    99+
    2022-08-12
    mysql的json类型 mysql处理json mysql有解析json数据
  • MySQL数据库中ENUM类型的作用是什么
    本篇文章给大家分享的是有关MySQL数据库中ENUM类型的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  MySQL数据库中ENU...
    99+
    2022-10-18
  • jpa使用@Column来定义字段类型
    目录jpa @Column定义字段类型jpa使用注解 设定字段类型为TEXT类型jpa @Column定义字段类型 columnDefinition 实在是比较万能,不好定义或者没有...
    99+
    2022-11-12
  • 使用JPA插入枚举类型字段
    目录JPA插入枚举类型字段1. 插入枚举名称的值,即字符串2. 插入枚举的序号,即ordinal3.插入枚举中的自定义值JPA枚举类型处理JPA插入枚举类型字段 JPA插入枚举类型字...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作