mysql Blob和Text类型

本文深入解析MySQL中的Blob和Text大数据类型,包括它们的不同种类及应用场景,并通过实例展示了如何将图片文件存储于数据库以及如何从中读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  • 一   对于mysql,除了常见的类型外,还有比较少见的Blob类型和Text类型,下面就两种类型进行进一步的解析
  • 二   大数据类型
  1.  Text类型(大文本系列)===>>VARCHAR的增强

          TINYTEXT: 255个字节                                                 TEXT:    65535字节    

          MEDIUMTEXT:  16M                                                    LONGTEXT: 4G

   

   2.Blob类型(大二进制系列)===>>BINARY的增强

          TINYBLOB:   255个字节                                     BLOB:   65535字节

           MEDIUMBLOB:  16M                                         LONGBLOB:     4G

   3.分别对应的java类型及其应用

            ① 存储一部小说或者text类型的文档,此时考虑使用TEXT系列.   TEXT系列对应Java中的String类型.   仅仅只需要把                          VARCHAR改成TEXT系  列 即可,Java代码不需要改动.

           ②二进制类型,主要用来存储图像,音频,视频等二级制数据. 一般的,在开发中我们都不会把二进制数据保存到数据库中,而                     是   把二进制文件的保存路径存储在数据库中,再通过路径去找到文件即可.

  • 三.把一张图片写入数据库和从数据库中读出来,存入到本地中 

// 把二进制文件存储到表中
	@Test
	public void testWrite()  {
		String hql = "insert into t_image (content) values (?)";
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			 conn = JdbcUtil.getConnection();
			 ps = conn.prepareStatement(hql);
			InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("E:/WorkPlace_mars2_64/jdbc/1.png");
			ps.setBlob(1, new FileInputStream("E:/WorkPlace_mars2_64/jdbc/1.png"));
			ps.executeUpdate();
		} catch (SQLException | FileNotFoundException e) {
			e.printStackTrace();
		}finally{
			JdbcUtil.realse(null, ps, conn);
		}
	}
	
	// 把表中的二进制读出来
	@Test
	public void testRead()  {
		String hql = "select * from t_image where id = ? ";
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			 conn = JdbcUtil.getConnection();
			 ps = conn.prepareStatement(hql);
			ps.setInt(1, 5);
			ResultSet rs = ps.executeQuery();
			while(rs.next()){
				Blob blob = rs.getBlob("content");
				InputStream is = blob.getBinaryStream();
				Path path = Paths.get("E:/WorkPlace_mars2_64/jdbc/2.png");
				Files.copy(is, path);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			JdbcUtil.realse(null, ps, conn);
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值