Hibernate配置文件中指定MySQL数据库的编码方式
2013-06-14 18:22
441 查看
1)
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://127.0.0.1:3306/db?useUnicode=true&characterEncoding=utf-8
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">con</property>
<mapping resource="com/hib/entity/Mytable.hbm.xml" />
</session-factory>
</hibernate-configuration>
2)
<hibernate-configuration>
<session-factory>
<property name="dialect"> org.hibernate.dialect.MySQLDialect </property>
<property name="connection.url"> jdbc:mysql://127.0.0.1:3306/db</property>
<property name="connectio.useUnicode">true</property>
<property name="connection.characterEncoding">utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class"> com.mysql.jdbc.Driver </property>
<property name="myeclipse.connection.profile">con</property>
<mapping resource="com/hib/entity/Mytable.hbm.xml" />
</session-factory>
</hibernate-configuration>
编程经验:
1.当mysql数据库为6.0且数据库安装时设置的数据库编码为utf8时,并且项目使用hibernate,Connection/J为mysql-connector-java-5.1.16-bin.jar
这个时候往数据库中插入数据会出现异常
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown character set: 'utf8mb4'
这是由于数据库版本和Connect/J版本不匹配的问题,
解决方案
将数据库换成5.x版本(完全删除6.0数据库)
或者
将Connection/J版本换为mysql-connector-java-5.1.22-bin.jar.或者以上版本(5.1.22以前的版本我都测试过,结果不行)
这种情况下还有一个问题是当把mysql数据库编码设置为utf8时.一个character占三个byte.当用HibernateExportUtil生成表的时候没有发生任何错误
但是如果有一个表的主键是联合主键.两个字段的长度也没有设置.那么这两个字段的长度可能会超过主键的规定长度.表都建立不出来.数据更插不进去了
当运行项目往数据库插入数据的时候就会报错 Table 'test.t_train' doesn't exist。
如果利用HibernateExportUtil在控制台生成的建表语句在Mysql Commend Client中执行,会出现以下错误
Specified key was too long; max key length is 767 bytes
意思就是主键太长了.解决办法在xxxxx.hbm.xml文件中设置那两个字段的长度
<composite-id>
<key-property name="trainNumber" length="20"></key-property>
<key-property name="zhanCi" type="integer" length="5"></key-property>
</composite-id>
2.如果数据库为6.0且数据库安装时设置的数据库编码为gbk,并且项目中使用hibernate.Connection/J为mysql-connector-java-5.1.16-bin.jar
这时数据库不会出现异常.
3.如果数据库使用的是5.x版本,数据库安装时设置的编码是gbk或者utf8,hibernate.cfg.xml配置文件中connection.url中后不需要加任何编码格式.
不会出现乱码现象,也不会出现以上错误
但是我建议使用gbk格式.因为mysql commond line client默认的是用gbk编码格式.如果将数据库编码格式设置为utf8.控制台上的中文全是乱码。
但实际上不是乱码只是显示出是乱码。
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://127.0.0.1:3306/db?useUnicode=true&characterEncoding=utf-8
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">con</property>
<mapping resource="com/hib/entity/Mytable.hbm.xml" />
</session-factory>
</hibernate-configuration>
2)
<hibernate-configuration>
<session-factory>
<property name="dialect"> org.hibernate.dialect.MySQLDialect </property>
<property name="connection.url"> jdbc:mysql://127.0.0.1:3306/db</property>
<property name="connectio.useUnicode">true</property>
<property name="connection.characterEncoding">utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class"> com.mysql.jdbc.Driver </property>
<property name="myeclipse.connection.profile">con</property>
<mapping resource="com/hib/entity/Mytable.hbm.xml" />
</session-factory>
</hibernate-configuration>
编程经验:
1.当mysql数据库为6.0且数据库安装时设置的数据库编码为utf8时,并且项目使用hibernate,Connection/J为mysql-connector-java-5.1.16-bin.jar
这个时候往数据库中插入数据会出现异常
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown character set: 'utf8mb4'
这是由于数据库版本和Connect/J版本不匹配的问题,
解决方案
将数据库换成5.x版本(完全删除6.0数据库)
或者
将Connection/J版本换为mysql-connector-java-5.1.22-bin.jar.或者以上版本(5.1.22以前的版本我都测试过,结果不行)
这种情况下还有一个问题是当把mysql数据库编码设置为utf8时.一个character占三个byte.当用HibernateExportUtil生成表的时候没有发生任何错误
但是如果有一个表的主键是联合主键.两个字段的长度也没有设置.那么这两个字段的长度可能会超过主键的规定长度.表都建立不出来.数据更插不进去了
当运行项目往数据库插入数据的时候就会报错 Table 'test.t_train' doesn't exist。
如果利用HibernateExportUtil在控制台生成的建表语句在Mysql Commend Client中执行,会出现以下错误
Specified key was too long; max key length is 767 bytes
意思就是主键太长了.解决办法在xxxxx.hbm.xml文件中设置那两个字段的长度
<composite-id>
<key-property name="trainNumber" length="20"></key-property>
<key-property name="zhanCi" type="integer" length="5"></key-property>
</composite-id>
2.如果数据库为6.0且数据库安装时设置的数据库编码为gbk,并且项目中使用hibernate.Connection/J为mysql-connector-java-5.1.16-bin.jar
这时数据库不会出现异常.
3.如果数据库使用的是5.x版本,数据库安装时设置的编码是gbk或者utf8,hibernate.cfg.xml配置文件中connection.url中后不需要加任何编码格式.
不会出现乱码现象,也不会出现以上错误
但是我建议使用gbk格式.因为mysql commond line client默认的是用gbk编码格式.如果将数据库编码格式设置为utf8.控制台上的中文全是乱码。
但实际上不是乱码只是显示出是乱码。
相关文章推荐
- Hibernate配置文件中指定MySQL数据库的编码方式
- Hibernate配置文件中指定MySQL数据库的编码方式
- Hibernate配置文件中指定MySQL数据库的编码方式
- Hibernate配置文件中指定MySQL数据库的编码方式
- Hibernate配置文件中指定MySQL数据库的编码方式
- Hibernate配置文件中指定MySQL编码方式
- Tomcat服务器启动失败, cmd命令行中开启时cmd窗口一闪而过, 原来是配置文件 server.xml 编码方式不对
- Hibernate映射文件配置(hbm.xml和注解方式)
- 编码问题 关于hibernate jdbc数据库连接在xml配置与在properties文件配置的差异
- hibernate 修改了配置文件的文件名的处理方式
- pom文件中使用指定路径的方式配置jar包依赖
- Spring配置文件中FactoryBean配置4种方式(2种hibernate,1种ibatis,1种mybatis)
- 使用命令参数方式指定log4j配置文件
- hibernate和Spring整合时,hibernate映射文件配置方式
- hibernate的配置文件,使用XML方式
- 第32天(就业班) hibernate框架概述、ORM概念、hibernate第一个实例、api讲解、查询方式、主配置文件、映射配置、主键映射
- Learning Python 016 写文件时,将其用指定的编码方式保存(比如:UTF-8无BOM编码方式)
- spring+hibernate 两种整合方式配置文件
- Spring加载properties文件指定编码方式
- Hibernate不同配置文件读取方式