MySQL异常-Data truncation: Data too long for column ‘xxx' at row 1

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 ";

猜你喜欢

转载自springsfeng.iteye.com/blog/1663653