hibernate向数据库插入中文时乱码

fanyuna 2011-02-15 11:00:01
我程序中的编码为UTF-8,安装MYSQL数据库时设置编码是utf8,用SQL向数据库里插入中文没有问题,但就是在程序中用

hibernate保存数据时,后台接收的中文正常,控制台打印的SQL语句中中文变成乱码了,也没插入成功。请问这是怎么回事儿

啊?我的连接数据库字符串是jdbc:mysql://localhost:3306/tour?characterEncoding=utf8 急 急 ~望各位指教!
...全文
906 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
magong 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 fanyuna 的回复:]

后台接收时还不是乱码,hibernate set时也不是,但就在插入时是乱码了,郁闷!
[/Quote]
你说的后台接收时指的是Action中,对吧
Hibernate set时指的是POJO Bean的setXXX方法的调用时,也是在Action中,对吧
插入时指的是什么呢?
lyg642259806 2011-02-17
  • 打赏
  • 举报
回复
先查看一下展现文件的编码是不是UTF8
或者在my.ini这个文件中看看客户端跟服务器的编码是不是都是UTF8,很有可能是因为客户端和服务端的编码不一致造成的
lws5254 2011-02-17
  • 打赏
  • 举报
回复
页面编码看看
fanyuna 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jackey_ctdw 的回复:]
在后台往前台传值的时候之前 还得编下码 编成 UTF-8
[/Quote]

后台传前台?我是接收前台的值插入到数据库啊。我的数据库连接字符串也改为jdbc:mysql://localhost:3306/tour?useUnicode=true&characterEncoding=utf-8 了,后台接收时还不是乱码,hibernate set时也不是,但就在插入时是乱码了,郁闷!
jackey_ctdw 2011-02-17
  • 打赏
  • 举报
回复
在后台往前台传值的时候之前 还得编下码 编成 UTF-8
fanyuna 2011-02-17
  • 打赏
  • 举报
回复
哦,使用mysql关键字这是一个问题,谢谢magong !我传中文时真有问题,(name, type, day..)values ('乱码', 1..),还用就是文本编辑器中的内容接收时是一个HTML,这个HTML字符串插入时也有问题,老在结束标记 </ 这儿报错!
WebSheldon 2011-02-17
  • 打赏
  • 举报
回复
order是关键字
zzhui2011 2011-02-17
  • 打赏
  • 举报
回复
只要保证从前台到后台,字符集都一致,中文是没问题的,要检查下哪里设置字符集有不同的,看看是不是和过滤器中设置的不一致?
qingyuan18 2011-02-16
  • 打赏
  • 举报
回复
response有setCharaterCode()么?
magong 2011-02-16
  • 打赏
  • 举报
回复
哦,这里的?不是乱码,Hibernate showSQL都是这样的。

你的问题是有个字段叫order,是SQL关键字,改字段名好了
zn85600301 2011-02-16
  • 打赏
  • 举报
回复
你的SQL输出是 hibernate的showSQL 还是你自己打印的
应该还是你入库时候造成的乱码
fanyuna 2011-02-16
  • 打赏
  • 举报
回复
打印的SQL如下:insert into tour.line (name, type, day, startAddr, destAddr, arrange, respPerson, trafficType, costInclude, costUnInclude, hotPoint, specialPoint, order, infoControl, clickCount, pic, addTime) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
但报错如下:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order, infoControl, clickCount, pic, addTime) values ('11', 1, 0, 0, 0, '', 1, 1' at line 1
谢谢大家了!
magong 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fanyuna 的回复:]

后台接收的中文正常,控制台打印的SQL语句中中文变成乱码了


就是在Action里接收的是不是乱码,页面编码是UTF-8的
[/Quote]
你的意思是Action中接收到的来自于页面的数据不是乱码,但是在Action中打印到控制台的SQL语句中就是乱码了?

SQL语句如何得到的呢?
fanyuna 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 magong 的回复:]
好像如2楼所说,useUnicode是要写的。

还有,LZ所说的“hibernate保存数据时,后台接收的中文正常”,后台指的是什么?
[/Quote]

就是在Action里接收的是不是乱码,页面编码是UTF-8的
licip 2011-02-16
  • 打赏
  • 举报
回复
+1[Quote=引用 2 楼 zhouhongbin123465 的回复:]
<property name="connection.url">jdbc:mysql:// localhost:3306/sports?useUnicode=true&amp;characterEncoding=utf-8</property>

连接数据库这样写
页面 数据库 程序中统一UTF-8
程序中设置写到过滤器里
这样还有乱码 我头给你当球踢
[/Quote]
magong 2011-02-16
  • 打赏
  • 举报
回复
好像如2楼所说,useUnicode是要写的。

还有,LZ所说的“hibernate保存数据时,后台接收的中文正常”,后台指的是什么?
magong 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fanyuna 的回复:]

hibernate set 属性时,那个值还不是乱码,SQL输出是 hibernate的showSQL ,SQL这里的中文就成了乱码,
[/Quote]
贴一条Hibernate showSQL出来的乱码看看吧。
asd12121200 2011-02-16
  • 打赏
  • 举报
回复
setCharaterCode()
fanyuna 2011-02-16
  • 打赏
  • 举报
回复
hibernate set 属性时,那个值还不是乱码,SQL输出是 hibernate的showSQL ,SQL这里的中文就成了乱码,所以记录也没插进去,数据库表中字段类型是字符串型的,跟长度没啥关系吧,否则就不是这样的错误啊
linyfei 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zn85600301 的回复:]
你的SQL输出是 hibernate的showSQL 还是你自己打印的
应该还是你入库时候造成的乱码
[/Quote]

<property name="connection.url">jdbc:mysql://localhost:3306/sports?useUnicode=true&amp;characterEncoding=utf-8</property>

“hibernate保存数据时,后台接收的中文正常,控制台打印的SQL语句中中文变成乱码了”说明是你入库时造成的乱码,你也可以看下你的数据库中中文对应的那一列数据类型和长度是否满足条件。
加载更多回复(2)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧