最近做畢業(yè)設(shè)計(jì)的時(shí)候,用了mysql5+tomcat5.5+jsp+servlet
用了數(shù)據(jù)庫(kù)連接池,出現(xiàn)中文問(wèn)題的原因倒不是它,都一樣的,
發(fā)現(xiàn)插入數(shù)據(jù)是中文的時(shí)候就插不進(jìn)去,tomcat后臺(tái)大概都是這個(gè)錯(cuò)誤
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
在網(wǎng)上搜了好多方法,自己都調(diào)不大起來(lái),今天小試了下,OK了
把主要過(guò)程記下
我的系統(tǒng)是xp的默認(rèn)字符肯定是GB2312吧,我也沒(méi)改系統(tǒng)的東西,
改了MYSQL的一些東西,就是Mysql的字符吧,安裝的時(shí)候有選字符集
default character set的時(shí)候選擇
best support for Multilinggualism 這樣處理后反正我看到
在my.ini的配置文件里默認(rèn)字符都utf-8的
連接數(shù)據(jù)庫(kù)的URL 后面也沒(méi)有跟setcharacter之類的,只有數(shù)據(jù)庫(kù)的名字。
servlet里面接收變量的時(shí)候也沒(méi)有g(shù)etBytes這樣的處理,直接
String subject = request.getParameter("subject");
我看到關(guān)鍵好象是在JSP頁(yè)面上應(yīng)該聲明
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
還有一個(gè)關(guān)鍵是用PrepareStatement的話,
dbc.prepareStatement("insert into news(topic,body,adddate,adduser,rootid,pic ) values(?,?,?,?,?,? )");
dbc.setBytes(1,topic.getBytes("ISO-8859-1"));
記住這里需要轉(zhuǎn),也不能換成gb2312
改成gb2312就會(huì)出現(xiàn)上面的錯(cuò)誤
我不太清楚原理,希望知道的人指定!