出现这个问题主要有两种原因:
1、编码问题
2、数据长度问题
对于第一个问题,我们只需要调整字段长度即可,例如我在mysql的表中插入一张图片,如果图片字段的格式为Blob(最大长度为65K),那么图片长度超过65K则会出现这个异常,解决办法是把Blob字段换成MediumBlob(16M)、或者LongBlob( 最大 4G)即可。
对于第二个问题就比较复杂了,以下为收集到的各种解决办法,我没有试过,仅供参考:
第一种情况:
将所有的编码都设置成utf8,jsp的contentType="text/html;charset=utf-8"
修改数据库默认编码ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
修改表的编码:ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
修改表字段的编码ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
第二种情况:
这种情况分为两步:插入数据和读取数据
1:插如数据到mysql中:
在页面上加入本页的编码方式
<%@ page contentType="text/html;charset=gb2312" %>
把你要插入的中文文字由gb2312转变为iso-8859
title = new String(title.getBytes("GB2312"), "ISO-8859-1");
***注意此页面千万别在数据库的URL后面加任何编码方式*****
conn = java.sql.DriverManager.getConnection ("jdbc:mysql://localhost/zqswork","root","root");
2:从mysql中读出数据到页面:
依然在页面上加如编码方式
<%@ page contentType="text/html;charset=gb2312" %>
把你要读出的中文由iso-8859转变为gb2312
<%username = new String(username.getBytes("ISO-8859-1"), "gb2312");%>
****注意此页面一定要在数据库url处加入编码方式(与上面相反)******
conn = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/zqswork?useUnicode=true&characterEncoding=gb2312","root","root");