1. MySQL的大字段类型
BLOB是一个二进制大对象,可以容纳可变数量的数据。
有4种BLOB类型: TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它们只是可容纳值的最大长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最
大长度和存储需求。
BLOB 列被视为二进制字符串(字节字符串)。TEXT列被视为非二进制字符串(字符字符串)。BLOB列没有字符
集,并且排序和比较基于列值字节的数值值。TEXT列有一个字符集,并且根据字符集的 校对规则对值进行排
序和比较。
在TEXT或BLOB列的存储或检索过程中,不存在大小写转换。
当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值,值被截取以保
证适合。
但若运行在严格模式下,将产生异常:Data truncation: Data too long for column ‘xxx' at row 1
几种类型的大字段最大长度说明:
TINYBLOB最大长度为255(2^[8]–1)字节的BLOB列。
TINYTEXT最大长度为255(2^[8]–1)字符的TEXT列。
BLOB[(M)]最大长度为65,535(2^[16]–1)字节的BLOB列。可以给出该类型的可选长度M。如果给出,则MySQL
将列创建为最小的但足以容纳M字节长的值的BLOB类型。
TEXT[(M)]最大长度为65,535(2^[16]–1)字符的TEXT列。可以给出可选长度M。则MySQL将列创建为最小的但
足以容纳M字符长的值的TEXT类型。
MEDIUMBLOB最大长度为16,777,215(2^[24]–1)字节的BLOB列。
MEDIUMTEXT最大长度为16,777,215(2^[24]–1)字符的TEXT列。
LONGBLOB最大长度为4,294,967,295或4GB(2^[32]–1)字节的BLOB列。LONGBLOB列的最大有效(允许的)长
度取决于客户端/服务器协议中配置最大包大小和可用的内存。
LONGTEXT最大长度为4,294,967,295或4GB(2^[32]–1)字符的TEXT列。LONGTEXT列的最大有效(允许的)长
度取决于客户端/服务器协议中配置最大包大小和可用的内存。
实际使用中根据需要存入的数据大小定义不同的BLOB类型。
需要注意的是:如果存储的文件过大,数据库的性能会下降很多。
2. 异常解决方法
(1) 确保将要存储的字节是数据库中指定的字节类型能容纳的字节数;
(2) 验证MySQL字符编码,例如在存储中文时可明确指定数据库连接编码:
String url = "jdbc:mysql://localhost/pbdp?user=root&password=1234&useUnicode=true&characterEncoding=gbk ";