有一次遇到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字符集,則有可能拋出異常。