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

时间:2022-06-26 07:06:17
 我程序中的编码为UTF-8,安装MYSQL数据库时设置编码是utf8,用SQL向数据库里插入中文没有问题,但就是在程序中用

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

啊?我的连接数据库字符串是jdbc:mysql://localhost:3306/tour?characterEncoding=utf8  急 急 ~望各位指教!

24 个解决方案

#1


首先 页面是否 设置编码格式为 utf-8?

#2


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

连接数据库这样写
页面 数据库 程序中统一UTF-8
程序中设置写到过滤器里 
这样还有乱码 我头给你当球踢

#3


好像如2楼所说,useUnicode是要写的。

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

#4


+1
引用 2 楼 zhouhongbin123465 的回复:
<property name="connection.url">jdbc:mysql:// localhost:3306/sports?useUnicode=true&amp;amp;characterEncoding=utf-8</property>

连接数据库这样写
页面 数据库 程序中统一UTF-8
程序中设置写到过滤器里 
这样还有乱码 我头给你当球踢

#5


该回复于2011-02-16 10:19:17被版主删除

#6


引用 3 楼 magong 的回复:
好像如2楼所说,useUnicode是要写的。

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


就是在Action里接收的是不是乱码,页面编码是UTF-8的

#7


引用 6 楼 fanyuna 的回复:
后台接收的中文正常,控制台打印的SQL语句中中文变成乱码了


就是在Action里接收的是不是乱码,页面编码是UTF-8的

你的意思是Action中接收到的来自于页面的数据不是乱码,但是在Action中打印到控制台的SQL语句中就是乱码了?

SQL语句如何得到的呢?

#8


你的SQL输出是 hibernate的showSQL 还是你自己打印的
应该还是你入库时候造成的乱码

#9


response有setCharaterCode()么?

#10


引用 8 楼 zn85600301 的回复:
你的SQL输出是 hibernate的showSQL 还是你自己打印的
应该还是你入库时候造成的乱码


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

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

#11


hibernate set 属性时,那个值还不是乱码,SQL输出是 hibernate的showSQL ,SQL这里的中文就成了乱码,所以记录也没插进去,数据库表中字段类型是字符串型的,跟长度没啥关系吧,否则就不是这样的错误啊

#12


setCharaterCode()

#13


引用 11 楼 fanyuna 的回复:
hibernate set 属性时,那个值还不是乱码,SQL输出是 hibernate的showSQL ,SQL这里的中文就成了乱码,

贴一条Hibernate showSQL出来的乱码看看吧。

#14


该回复于2011-02-16 16:15:32被版主删除

#15


打印的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   
谢谢大家了!

#16


哦,这里的? 不是乱码,Hibernate showSQL都是这样的。

你的问题是有个字段叫order,是SQL关键字,改字段名好了

#17


哦,使用mysql关键字这是一个问题,谢谢magong !我传中文时真有问题,(name, type, day..)values ('乱码', 1..),还用就是文本编辑器中的内容接收时是一个HTML,这个HTML字符串插入时也有问题,老在结束标记 </  这儿报错!

#18


在后台往前台传值的时候之前 还得编下码   编成 UTF-8

#19


引用 18 楼 jackey_ctdw 的回复:
在后台往前台传值的时候之前 还得编下码 编成 UTF-8


后台传前台?我是接收前台的值插入到数据库啊。我的数据库连接字符串也改为jdbc:mysql://localhost:3306/tour?useUnicode=true&amp;characterEncoding=utf-8 了,后台接收时还不是乱码,hibernate  set时也不是,但就在插入时是乱码了,郁闷!

#20


页面编码看看

#21


引用 19 楼 fanyuna 的回复:
后台接收时还不是乱码,hibernate set时也不是,但就在插入时是乱码了,郁闷!

你说的后台接收时指的是Action中,对吧
Hibernate set时指的是POJO Bean的setXXX方法的调用时,也是在Action中,对吧
插入时指的是什么呢?

#22


只要保证从前台到后台,字符集都一致,中文是没问题的,要检查下哪里设置字符集有不同的,看看是不是和过滤器中设置的不一致?

#23


order是关键字

#24


先查看一下展现文件的编码是不是UTF8
或者在my.ini这个文件中看看客户端跟服务器的编码是不是都是UTF8,很有可能是因为客户端和服务端的编码不一致造成的

#1


首先 页面是否 设置编码格式为 utf-8?

#2


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

连接数据库这样写
页面 数据库 程序中统一UTF-8
程序中设置写到过滤器里 
这样还有乱码 我头给你当球踢

#3


好像如2楼所说,useUnicode是要写的。

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

#4


+1
引用 2 楼 zhouhongbin123465 的回复:
<property name="connection.url">jdbc:mysql:// localhost:3306/sports?useUnicode=true&amp;amp;characterEncoding=utf-8</property>

连接数据库这样写
页面 数据库 程序中统一UTF-8
程序中设置写到过滤器里 
这样还有乱码 我头给你当球踢

#5


该回复于2011-02-16 10:19:17被版主删除

#6


引用 3 楼 magong 的回复:
好像如2楼所说,useUnicode是要写的。

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


就是在Action里接收的是不是乱码,页面编码是UTF-8的

#7


引用 6 楼 fanyuna 的回复:
后台接收的中文正常,控制台打印的SQL语句中中文变成乱码了


就是在Action里接收的是不是乱码,页面编码是UTF-8的

你的意思是Action中接收到的来自于页面的数据不是乱码,但是在Action中打印到控制台的SQL语句中就是乱码了?

SQL语句如何得到的呢?

#8


你的SQL输出是 hibernate的showSQL 还是你自己打印的
应该还是你入库时候造成的乱码

#9


response有setCharaterCode()么?

#10


引用 8 楼 zn85600301 的回复:
你的SQL输出是 hibernate的showSQL 还是你自己打印的
应该还是你入库时候造成的乱码


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

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

#11


hibernate set 属性时,那个值还不是乱码,SQL输出是 hibernate的showSQL ,SQL这里的中文就成了乱码,所以记录也没插进去,数据库表中字段类型是字符串型的,跟长度没啥关系吧,否则就不是这样的错误啊

#12


setCharaterCode()

#13


引用 11 楼 fanyuna 的回复:
hibernate set 属性时,那个值还不是乱码,SQL输出是 hibernate的showSQL ,SQL这里的中文就成了乱码,

贴一条Hibernate showSQL出来的乱码看看吧。

#14


该回复于2011-02-16 16:15:32被版主删除

#15


打印的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   
谢谢大家了!

#16


哦,这里的? 不是乱码,Hibernate showSQL都是这样的。

你的问题是有个字段叫order,是SQL关键字,改字段名好了

#17


哦,使用mysql关键字这是一个问题,谢谢magong !我传中文时真有问题,(name, type, day..)values ('乱码', 1..),还用就是文本编辑器中的内容接收时是一个HTML,这个HTML字符串插入时也有问题,老在结束标记 </  这儿报错!

#18


在后台往前台传值的时候之前 还得编下码   编成 UTF-8

#19


引用 18 楼 jackey_ctdw 的回复:
在后台往前台传值的时候之前 还得编下码 编成 UTF-8


后台传前台?我是接收前台的值插入到数据库啊。我的数据库连接字符串也改为jdbc:mysql://localhost:3306/tour?useUnicode=true&amp;characterEncoding=utf-8 了,后台接收时还不是乱码,hibernate  set时也不是,但就在插入时是乱码了,郁闷!

#20


页面编码看看

#21


引用 19 楼 fanyuna 的回复:
后台接收时还不是乱码,hibernate set时也不是,但就在插入时是乱码了,郁闷!

你说的后台接收时指的是Action中,对吧
Hibernate set时指的是POJO Bean的setXXX方法的调用时,也是在Action中,对吧
插入时指的是什么呢?

#22


只要保证从前台到后台,字符集都一致,中文是没问题的,要检查下哪里设置字符集有不同的,看看是不是和过滤器中设置的不一致?

#23


order是关键字

#24


先查看一下展现文件的编码是不是UTF8
或者在my.ini这个文件中看看客户端跟服务器的编码是不是都是UTF8,很有可能是因为客户端和服务端的编码不一致造成的