`
53873039oycg
  • 浏览: 843957 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

使用Mysql的Blob要注意Blob最大限制到65K字节

 
阅读更多

     今天在使用Hibernate 4插入Clob,Blob类型数据到mysql时候 ,Hibernate报错,错误信息为

    

Data truncation: Data too long for column

    一开始,我以为自己设置的参数有问题,看了下

  

port		= 3306
#设置mysql的安装目录
basedir = D:\mysqlbase
#设置mysql数据库的数据存放目录,必须是data或者\xxx-data
datadir = D:\mysqlbase\data
#设置服务器段的字符集
character_set_server = utf8

#thread_cache_size=100
#read_buffer_size=512K
#record_buffer=16M
#sort_buffer=16M
max_allowed_packet = 20M

    20M应该够了,我只是插了张900k左右的图片而已,Blob数据类型不是放很大的数据吗?

    在谷歌之后,我发现我错了,可以看官方文档的说明

   

  BLOB[(M)]

最大长度为65,535(216–1)字节的BLOB列。

可以给出该类型的可选长度M。如果给出,则MySQL将列创建为最小的但足以容纳M字节长的值的BLOB类型。

·         TEXT[(M)]

最大长度为65,535(216–1)字符的TEXT列。

可以给出可选长度M。则MySQL将列创建为最小的但足以容纳M字符长的值的TEXT类型。

·         MEDIUMBLOB

最大长度为16,777,215(224–1)字节的BLOB列。

·         MEDIUMTEXT

最大长度为16,777,215(224–1)字符的TEXT列。

·         LONGBLOB

最大长度为4,294,967,295或4GB(232–1)字节的BLOB列。LONGBLOB列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。

·         LONGTEXT

最大长度为4,294,967,295或4GB(232–1)字符的TEXT列。LONGTEXT列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存

   也就是说Blob,Clob类型只能放65K的数据,longblob,longtext能放4G的数据。

   所以正确的方式是修改类型为longblob,或者插入65k以下的数据。

    附录:

    我的最初的建表sql为:

  

CREATE TABLE `tsp_person` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `image` blob,
  `intro` text COLLATE utf8_bin,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

    测试方法为:

  

public void saveTest2() throws Exception {
		Person person = new Person();
		File file = new File("F:/saveFile/testhua.jpg");
		FileInputStream fis = new FileInputStream(file);
		File file1 = new File("f:/saveFile/my_log.log");
		Reader reader = new FileReader(file1);
		// 必须开启事务
		Session session = HibernateUtil.openSession(); 
		Transaction ts = session.beginTransaction();
		person.setImage(session.getLobHelper().createBlob(fis, file.length()));
		person.setIntro(session.getLobHelper().createClob(reader,
				file1.length()));
		ts.commit();
		baseDao.saveObject(person);
		
		
	}

    工具类为:

   

public class HibernateUtil {
	private static final SessionFactory sessionFactory;
	static {
		try {
			Configuration cfg = new Configuration().configure();
			ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
					.applySettings(cfg.getProperties()).build();

			sessionFactory = cfg.buildSessionFactory(serviceRegistry);
		} catch (Throwable e) {
			throw new ExceptionInInitializerError(e);
		}
	}

	private HibernateUtil() {
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	
	 /**  
     * 获取session对象  
     * @return  
     */  
    public static Session openSession(){  
        return sessionFactory.getCurrentSession();  
    } 

}

 

     做的过程中参考了博文,原博文地址:   

   

http://www.yihaomen.com/article/java/453.htm HibernateUtil工具类在hibernate3下与hibernate4下的区别

http://blog.csdn.net/yantingmei/article/details/18050341

    全文完。   

分享到:
评论
1 楼 aaaweisen 2015-11-03  
[u][u][u][u][u][u][u][u][u][u][u][u][u][u][u][u][i][i][i][i][i][i][i][i][i][i][i][b][b][b][b][b][b][b][b][b][b][b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/u][/u][/u][/u][/u][/u][/u][/u][/u][/u][/u][/u][/u][/u][/u][/u]

相关推荐

    QT-Mysql-Blob.zip_mysql blob_qt blob 文件_qt blob类型_qt的blob

    为了与MySQL的BLOB字段交互,我们需要使用QByteArray,这是一个可以存储任意字节序列的类。例如,如果你想插入一个图像文件到BLOB字段,你需要先将图像文件读入QByteArray,然后在SQL插入语句中使用这个数组。 以下...

    mysql blob to 向 file转换

    "MySQL 中的 BLOB 到文件的转换" 在 MySQL 数据库中,BLOB(Binary Large OBject)是一种二进制大对象类型,常用于存储图像、音频、视频和其他类型的文件。然而,在实际应用中,我们经常需要将 BLOB 数据转换为文件...

    从mysql数据库中批量下载Blob图片到本地

    MySQL是一个广泛使用的开源关系型数据库管理系统,它提供了对BLOB(Binary Large Object)类型的支持,用于存储大块二进制数据。本教程将深入探讨如何在Java环境下,批量地从MySQL数据库中下载存储在Blob字段中的...

    mysql_blob_tools

    TinyBlob可以存储最多255个字节,Blob可存储65,535个字节,MediumBlob能存储16,777,215个字节,而LongBlob则可以存储4,294,967,295个字节或更大。 在`mysql_blob_tools`中,`main.cpp`可能是一个C++源代码文件,...

    向数据库插入blob数据实例源码--在mysql中通过

    在MySQL中,要创建一个包含Blob字段的表,可以使用以下SQL语句: ```sql CREATE TABLE BlobTable ( id INT AUTO_INCREMENT PRIMARY KEY, blobField BLOB ); ``` 这里我们创建了一个名为`BlobTable`的表,...

    java,Blob字段操作,将图片或者文件保存到数据库中.zip

    - Blob数据量大时,读写可能会消耗大量内存,因此处理Blob时要注意性能优化,避免一次性加载整个Blob内容。 - Blob数据的生命周期管理也很重要,及时清理不再使用的Blob,以防止数据库空间浪费。 8. **示例代码...

    mysql oracle 插入blob数据实例源码

    在这个例子中,我们创建了一个PreparedStatement,设置SQL语句的占位符,并使用setBinaryStream方法将图片文件转换为字节流,然后插入到数据库中。 二、Oracle中的Blob数据插入 Oracle数据库处理Blob数据的方法...

    MySQL BLOB类型中二进制字段和批量操作输入.docx

    2. BLOB:最多可以存储2^16 - 1(65,535)个字节。 3. MEDIUMBLOB:最多可以存储2^24 - 1(16,777,215)个字节。 4. LONGBLOB:最多可以存储2^32 - 1(4,294,967,295)个字节。 在处理BLOB类型的字段时,由于其二...

    jsp1.rar_jsp blob_jsp 图片_mysql blob_图片 MySQL

    `jsp1.rar_jsp blob_jsp 图片_mysql blob_图片 MySQL`这个标题和描述指向了一个具体的场景:使用JSP(JavaServer Pages)从MySQL数据库中读取存储为BLOB(Binary Large Object)类型的图片数据。 首先,我们来理解...

    实现blob类型数据上传至MySQL数据库.rar

    当需要从数据库中检索`BLOB`数据时,可以使用`ResultSet`获取`Blob`对象,然后将其转换为字节数组,最后保存或显示到客户端。 通过以上步骤,你就可以在JSP页面上实现`BLOB`类型数据的上传,并将其存储到MySQL...

    什么是blob,mysql blob大小配置介绍

    2. **Blob**:适合稍大一些的二进制数据,最大可存储65,535字节(即64KB)。 3. **MediumBlob**:用于存储更大的文件,最多能容纳16,777,215字节(即16MB)。 4. **LongBlob**:针对非常大的二进制对象,可存储...

    blob 文件入库例子

    在IT领域,Blob(Binary Large Object)是一种用于存储大量二进制数据的数据类型,常见于数据库系统中,如MySQL。...同时,也要注意文件大小限制,因为Blob字段的大小受到数据库服务器配置的影响。

    PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】

    本文实例讲述了PHP操作MySQL中BLOB字段的方法。...Blob: 最大 65K MediumBlob:最大 16M LongBlob: 最大 4G 注意:如果你存储的文件过大,数据库的性能会下降很多。 2、PHP操作BLOB案例 (1)操作新

    hibernate struts处理mysql数据库blob字段实例

    4. **保存BLOB数据**:将上传的文件转换为字节数组,赋值给`FileEntity`的`fileContent`属性,然后调用`Session`的`save()`或`saveOrUpdate()`方法保存到数据库。 5. **查询和读取BLOB**:通过`Session`的`get()`或`...

    图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片)

    例如,使用Java的JDBC API,可以创建PreparedStatement来执行INSERT语句,然后使用OutputStream将BASE64解码后的字节数组写入Blob对象。检索时,通过ResultSet获取Blob对象,再读取其InputStream,最终转换回图片。 ...

    mysql取存储于数据库中的图片

    在本例中,我们使用 MEDIUMBLOB 字段来保存图片,因为 BLOB 字段的最大长度是 216-1 字节,大约 64K,而 MEDIUMBLOB 字段的最大长度是 224-1 字节,约 16M,足够用了。在保存图片时,我们使用了 saveImage() 方法,...

    mysql中blob数据处理方式

    以下是一个Java程序的例子,展示了如何从MySQL数据库中获取BLOB数据并将其保存到本地文件系统,然后可能进一步上传到其他存储系统,如Hadoop HDFS或FTP服务器。 首先,我们需要导入必要的Java库,包括`java.sql`包...

    与MSSQL对比学习MYSQL的心得(四)--BLOB数据类型

    2. Blob:最大存储65,535字节(约64KB),适用于中等大小的数据。 3. MediumBlob:最大存储16,777,215字节(约16MB),用于较大文件的存储。 4. LongBlob:最大存储4,294,967,295字节(约4GB),能够存储非常大的二...

    MySQL使用TEXT/BLOB类型的知识点详解

    当对TEXT和BLOB列进行排序时,MySQL只会对每个列的前`max_sort_length`字节进行排序,默认值为1024字节。这意味着如果排序依据的数据超出这个范围,排序结果可能不准确。可以通过修改配置文件来调整`max_sort_...

    MySQL中TEXT与BLOB字段类型的区别

    在MySQL中,TEXT和BLOB列在存储和检索时都不会进行大小写转换,这意味大小写敏感的比较和排序将基于实际输入的字节。 5. **严格模式** 在非严格模式下,如果尝试向BLOB或TEXT列插入超过列定义长度的数据,MySQL会...

Global site tag (gtag.js) - Google Analytics