最近做畢業設計的時候,用了mysql5+tomcat5.5+jsp+servlet
用了數據庫連接池,出現中文問題的原因倒不是它,都一樣的,
發現插入數據是中文的時候就插不進去,tomcat后臺大概都是這個錯誤
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 't
opic' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2868)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedSt
atement.java:1169)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPrepared
Statement.java:693)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java
:1404)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java
:1318)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java
在網上搜了好多方法,自己都調不大起來,今天小試了下,OK了
把主要過程記下
我的系統是xp的默認字符肯定是GB2312吧,我也沒改系統的東西,
改了MYSQL的一些東西,就是Mysql的字符吧,安裝的時候有選字符集
default character set的時候選擇
best support for Multilinggualism 這樣處理后反正我看到
在my.ini的配置文件里默認字符都utf-8的
連接數據庫的URL 后面也沒有跟setcharacter之類的,只有數據庫的名字。
servlet里面接收變量的時候也沒有getBytes這樣的處理,直接
String subject = request.getParameter("subject");
我看到關鍵好象是在JSP頁面上應該聲明
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
還有一個關鍵是用PrepareStatement的話,
dbc.prepareStatement("insert into news(topic,body,adddate,adduser,rootid,pic ) values(?,?,?,?,?,? )");
dbc.setBytes(1,topic.getBytes("ISO-8859-1"));
記住這里需要轉,也不能換成gb2312
改成gb2312就會出現上面的錯誤
我不太清楚原理,希望知道的人指定!