站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题永远的Data too long for column!!哭,高分求助!

永远的Data too long for column!!哭,高分求助!

摘要: 永远的Data too long for column!!哭,高分求助!


我用jsp+spring1.2+hiberante3.0作毕业设计,数据库用的mysql5.0.27

当从持久化层向数据库里传入中文时,不是乱码就是Data too long for column```

我曾用过的解决办法如下:

1. 统一用utf8(操作如下):

(1)
所有jsp页面用
<%@ page language="java" contentType="text/html; charset=utf8"
pageEncoding="utf8"%>

(2)
用servlet fliter 把所有request和response的CharacterEncoding设为utf8

(3)
在DAO对象要用save()把持久化对象存入数据库之前,把持久化对象的String类型的属性做如下转换:

String strnameGB =new String(strname.getBytes("utf8"),"utf8");不转换也不行,new String(strname.getVytes("utf8"),"ISO-8859-1")后是乱码.(***只要new String的第二的参数不是"ISO-8859-1"的话,无论此时数据库的编码是什么,就肯定是Data too long for column!!

(4)spring的applicationContext如下:

class="org.apache.commons.dbcp.BasicDataSource">

com.mysql.jdbc.Driver


jdbc:mysql://localhost:3306/yiyuan?useUnicode=true&amp;characterEncoding=GB2312


root


1



(5)把mysql的字符集设为utf8(通过修改my.ini,把所有的latin1改为utf8)
并且通过show variables like '%char%';显示(如下)
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_filesystem | binary |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | C:/MySQL/MySQL Server 5.0/share/charsets/ |
+--------------------------+-------------------------------------------+


(6)把数据库中的所有表的charset都改为utf8



2.统一用gb2312(操作同上)

3.统一用gbk(操作同上)




我真的不知道到底是怎么回事!!!!!!!!!!!!!!
是不是hibernate的问题呀!!!!!

求助!





更正一下!!第(4)步应该是这样:
class="org.apache.commons.dbcp.BasicDataSource">

com.mysql.jdbc.Driver


jdbc:mysql://localhost:3306/yiyuan?useUnicode=true&amp;characterEncoding=utf8


root


1



刚才是笔误,


(5)也笔误
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:/MySQL/MySQL Server 5.0/share/charsets/ |
+--------------------------+-------------------------------------------+



朋友,"Data too long for column"不是编码的原因,别在这上面浪费时间.
99.9%的原因是mysql字段长度不够,比POJO中的数据长度短,所以请你修改mysql中对应的表字段。



呵呵,楼上说的是正确的。
另外,建议楼主学一下字符集的知识


多谢楼上两位,但是我在数据库中的相应字段的类型是varchar(100),而我只是输入了两个中文字
怎么会 data too long 呢????


而且如果把字符改成new String(strname.getByte("utf8"),"ISO-8859-1")的话,就可以插入,但是是乱码,所以不会是mysql字段不够长的问题


学习!


顶上去


仔细看看


楼上仁兄什么意思?


继续顶


以前我也遇到过类似的情况,我的建议:
1.在装数据库的时候把你的字符集设置为gb2312,然后你建表的时候,汉字默认都是gb2312

2.在连接数据库的时候不要写成characterEnconding=true&charset=gb2312,把这个去掉。

3.然后在连接的时候写stat.execute("set names gb2312");


最好用gbk,gb2312对某些不常见的字符会出现Data too long for column,比如“珺”字等,至于数据库,只有默认的字符集是gb2312或者gbk或者utf8都没什么问题


学习中,大家讨论的可真热闹,我也学点。


to:宇宙之神
我用的是spring框价,数据库的联接等等都交给spring了,我自己能控制的也只有这句


jdbc:mysql://localhost:3306/yiyuan?useUnicode=true&amp;characterEncoding=utf8


不可能stat.execute("set names gb2312")




to:abbey_liu_CHN

gbk我也用了,问题依旧,而且我只是输入了"好"这个字而已呀!!


沉了,顶


上面几个朋友,不是楼主的列长度不够。
而是楼主用了MYSQL的默认安装方式: LATIN1编码。
在LATIN1编码的都是一个长度,而我们的汉字,是双字节,
当然插不进去啦。


如果楼主是MYSQL5的话,你要看仔细了。

把每个列,每个表,每个数据库,都要设成UTF8编码。
然后在插入前,将要插入的数据转换成UTF8编码(上面楼主写
的方法已经很全了),就可以了。

不好用的话联系我。QQ 510045240



学习一下呢。


各位,mysql的修改列字符集的命令是什么呀?


sg552(:))说的没错,我遇到过这样的问题,楼主只需要更改你插入的字段的字符集,UTF-8


↑返回目录
前一篇: 请问,java可以在网页上操作网络编程和磁盘文件吗
后一篇: 关于JSP操作文本文件的中文乱码的问题