有一次遇到mysql jdbc抛出异常

Data truncation: Data too long for column

经过思考,发现原因可能有两种:

一、字段长度不够。

可以考虑选择更长的字段,例如:

VARCHAR->TEXT->MEDIUMTEXT->LONGTEXT->LONGBLOB

另外mysql貌似没有nvarchar类型


二、数据源URL中的字符集选项跟数据库表的实际字符集不统一

如果是统一的话,Java代码的写法应该是:

String driverName = "com.mysql.jdbc.Driver";

String dbURL = "jdbc:mysql://localhost:3306/cmsproj?useUnicode=true&characterEncoding=utf-8";


而数据表的创建方式是

CREATE TABLE xxx

( ...

) ENGINE=MyISAM DEFAULT CHARSET=utf8 


注意:

* 数据库也可以指定字符集,但如果在create table中使用默认字符集,则create table更优先。

* Java代码在编译时使用utf8还是gbk不会有影响,只要传入的参数不是乱码就可以。


其实不统一字符集的话也是可以工作,只是有一定概率会抛出Data truncation异常,例如URL中指定了utf8字符集,而创建表不指明utf8字符集或者使用缺省latin字符集,则有可能抛出异常。