有一次遇到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字符集,则有可能抛出异常。
时间: 2024-10-27 11:22:23