-
hibernate 乱码问题(全程都是utf-8,为什么还是乱码)25
一,数据库(mysql)
mysql> show variables like '%char%';
+--------------------------+---------------------------------------------------------+
| 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 | D:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)mysql> show create table user;
+-------+-------------------------------------------------------------------------------------------
----------------------------------------------------------------------+
| Table | Create Table
|
+-------+-------------------------------------------------------------------------------------------
----------------------------------------------------------------------+
| user | CREATE TABLE `user` (
`id` bigint(20) NOT NULL auto_increment,
`name` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------
----------------------------------------------------------------------+二,applicationContext.xml
<!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="org.gjt.mm.mysql.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8" /> <property name="username" value="root" /> <property name="password" value="elephant1234" /> <!-- Connection Pooling Info --> <property name="initialSize" value="5" /> <property name="maxActive" value="100" /> <property name="maxIdle" value="30" /> <property name="maxWait" value="1000" /> <property name="poolPreparedStatements" value="true" /> <property name="defaultAutoCommit" value="false" /> </bean> <!-- 配置sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="namingStrategy"> <bean class="org.hibernate.cfg.ImprovedNamingStrategy" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">false</prop> <prop key="hibernate.hbm2ddl.auto">create</prop> </props> </property> <property name="packagesToScan" value="com.company.project.*" /> </bean>
三,所有的java文件都是utf-8的
四,测试类
public class TestRun { @Test public void testRunSpring() { try { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); SessionFactory sessionFactory = (SessionFactory)ac.getBean("sessionFactory"); Session session = sessionFactory.openSession(); session.beginTransaction(); User user = new User(); user.setName("杨志斌"); session.save(user); session.getTransaction().commit(); } catch (BeansException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
期待高手解决!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
问题补充:
数据库显示:
+----+-----------+
| id | name |
+----+-----------+
| 1 | 鏉ㄥ織鏂? |
+----+-----------+
我使用mysql> set names gbk;然后显示:
mysql> select * from user;
+----+--------+
| id | name |
+----+--------+
| 1 | 杨志斌 |
+----+--------+
1 row in set (0.00 sec)
这说明插入到数据库为gbk编码,不知道为什么是gbk编码
问题补充:
感谢1000的回答,但是我下面的查询还不能代表我的mysql为utf8表名吗?
我安装时时latin1的,但是我修改了my.ini文件,使数据库为utf8编码的了,这样效果应该一样吧
mysql> show variables like '%char%';
+--------------------------+---------------------------------------------------------+
| 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 | D:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
问题补充:
感谢Rowen
我没有使用tomcat,我就单纯做hibernate+spring测试(也没有使用struts)
问题补充:
再次感谢1000, 我安装你的那个方式重新配置过还是不行,数据库里还是乱码2009年8月11日 16:12
24个答案 按时间排序 按投票排序
-
这个也就是默认使用了windows平台的默认字符编码,
你用控制台查看数据库中的数据,那个dos控制台本身就是用gbk来显示的
你可以用程序再把数据从数据库中查询出来看是否乱码就知道是否正确插入2009年8月24日 12:51
-
出现乱码的主要原因:
数据库中显示的编码格式和你插入的编码格式不一致
既然“ set names gbk”能正常显示中文,那说明你的数据表采用的编码格式是GBK,你虽然设置为UTF-8,但是事实证明一切,你的编码格式还是GBK。
user.setName("杨志斌");
上面这调语句到保存到数据库中,进而显示出来的编码变化如下:
字符串(Unicode编码)---->UTF-8(你设置的数据库连接编码)----->GBK(你数据库采用的编码格式)
在转化的过程中,首先在第一步转化时,一个汉字本来是两个字节,转化为UTF-8后,变为了三个字节,而在第二步转化的时候,一个汉字又变为了两个字节。这个听起来可能有点费力,举个例子吧:
例如你想保存“a中文”这个字符串- “a中文”对应的Unicode编码是:\u0061\u4E2D\u6587(注解:可以看到占用了六个字节)
- “a中文”从Unicode编码变为UTF-8编码后的编码:0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87(注解:UTF-8是采用字节数组来保存数据的,0x开头的是十六进制数,对于英文字符,UTF-8采用ASCII编码格式,即占用了一个字节,而对于中文占用了三个字节)
- “a中文”从UTF-8编码变为GBK编码后的编码是:\u0061\u6D93\uE15F\u6783(注解:此时转化时根据UTF-8的编码进行的,所以会依次读取字节数组,每两个字节转换为一个字符,所以就转换了四个字符最后一个是?),你如果用nativeascii转化一个泥就能看到结果是:a涓枃?。
通过我以上的分析,你应该明白出现乱码的原因了吧。
解决办法:
我个人认为,作为一个Java程序员,只要明白原理之后,应该具备解决问题的能力的。
首先问一下自己,在设置每一处字符编码的时候,作用是什么?不要在不理解的情况下,到处设置,结果当然会出现乱码了。把你所有的设置过的编码全部去掉,然后只要设置两处即可。2009年8月18日 11:47
-
不好意思,没把你的问题看完。。。
那么你这样试试吧。。第一 在命令行插入汉字。。select 看是否为乱码!
其次。。页面的数据先不提交到数据库。。在后台把它打印出来。。。看是否为乱码!
如果这样还是找不到原因。。建议拿到别的电脑上面试试。。。
是否为mysal安装的问题! 以前我也这样遇到过。。2009年8月17日 14:06
-
建议页面和数据库的字符集都设成gbk,这样可以避免不必要的错误,如果这样还是不行的话,在mysql命令行里输入set names gbk这个口令,一般情况下是可以解决乱码问题的,如果还是不行的话那你只有再另查别的资料了
2009年8月14日 13:38
-
在MYSQL的安装文件中my.ini文件中一定出现的是default-character-set=gbk有两处,这是mysql默认的编码格式,你把gbk改为utf8,看看就可以了。我想问题就出现在这。
2009年8月13日 21:47
-
你这个问题是数据库编码问题,表的设计中如果有中文字段,应该在表的设计时候给对应的字段设置编码,默认的lais啥子哟。记不到了。改为GB2312 你在试试。不行找我
2009年8月13日 12:01
-
首先:从你的show variables like '%char%';可以看出你已经成功设置好了数据库引擎的编码;
其次:你在建表的时候应该采用此种格式:
CREATE TABLE FUNDTYPE
(
FUND_TYPE_CODE VARCHAR(32) UNIQUE NOT NULL,
FUND_TYPE_NAME VARCHAR(32) NOT NULL,
CONSTRAINT PK_FUNDTYPE PRIMARY KEY(FUND_TYPE_CODE)
)ENGINE=INNODB DEFAULT CHARSET=UTF8;
即在后面加入"ENGINE=INNODB DEFAULT CHARSET=UTF8"
最后:
hiberntae的链接属性应该为<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf-8"/>
我的个人步骤是如此,你不防试试。2009年8月12日 18:16
-
引用ENGINE=InnoDB DEFAULT CHARSET=utf8
我的表添加UTF 8支持的时候是这样。。
Create table tablename(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(15) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM DEFAULT CHARACTER SET UTF8
驱动:引用useUnicode=true&characterEncoding=UTF-8"
useUnicode=true&characterEncoding=utf-8"
2009年8月11日 17:14
-
那就怪了,你的配置和我的差不多。就剩下org.hibernate.dialect.MySQL5InnoDBDialect方言不一样了。
我以前也遇到过此问题,解决了很多次。2009年8月11日 16:51
-
你是不是TOMCAT。。是的话。。改下编码试试:
修改Tomcat\conf下的server.xml
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150"
connectionTimeout="20000" redirectPort="8443"
URIEncoding="UTF-8"/>
修改目的:为了解决使用HTTP Get方法传递中文参数乱码的问题2009年8月11日 16:25
-
如果你的MySQL是安装版的话,有一个步骤是在安装的时候让你选择编码方式。
必须在那里指定是utf-8插入数据库后才是正确的。
你重新安装下数据库,里面有一个步骤见图2009年8月11日 16:23
相关推荐
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...
hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar官方下载,请放心使用
总的来说,`hibernate-jpa-2.1-api-1.0.0.final.jar`为开发者提供了丰富的JPA 2.1特性的实现,使得在Java项目中使用Hibernate进行数据库操作变得更加便捷和标准化。通过深入理解和熟练运用这个API,我们可以构建出...
hibernate-search-5.8.0.Final-dist.zip hibernate-search-5.8.0.Final-dist.zip
使用hibernate-validator 进行校验的jar包,里面包括了基础hibernate-validator-5.0.0.CR2.jar hibernate-validator-annotation-processor-5.0.0.CR2.jar 之外,还包括了el-api-2.2.jar javax.el-2.2.4等项目必不可...
hibernate3.6 对应的 hibernate-validator-4.1.0
为了防止乱码,我们需要在URL中添加`useUnicode=true`和`characterEncoding=UTF-8`这两个参数,这样可以确保数据在传输到MySQL时使用UTF-8编码。 具体修改后的配置如下: ```xml jdbc:mysql://localhost:3306/...
java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil 或javax/persistence/entitylistener问题
java 三大框架之一hibernate-core-5.2.12.Final-sources源代码,hibernate是连接数据库提高开发效率的框架,桌面应用程序和web项目都可以用
2. **库文件**:包含jar包,如hibernate-core.jar、hibernate-entitymanager.jar等,这些是我们在项目中引入Hibernate时需要用到的依赖库。 3. **文档**:通常包括用户指南、API文档、开发者文档等,这些文档提供了...
特别是在使用MySQL作为数据库,并且已将数据库编码设置为`utf-8`的情况下,依然出现乱码现象。这不仅影响数据的正确性,也降低了系统的可用性。 #### 解决方案 为了解决Hibernate中文乱码问题,我们需要从以下几个...
hibernate的最新jar包,hibernate-core-3.5.3-Final-sources,用于安装hibernate
java运行依赖jar包
Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。