feng

飘逸~~~~~life

碰到的MYSQL数据库中文问题小结

最近做毕业设计的时候,用了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就会出现上面的错误
我不太清楚原理,希望知道的人指定!

posted on 2007-10-22 14:15 feng 阅读(1260) 评论(1)  编辑  收藏

Feedback

# re: 碰到的MYSQL数据库中文问题小结 2007-10-31 11:09 astamei

Data too long for column 'topic

plz show us ur ddl of table.   回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航: