您的位置:首页 > 数据库 > MySQL

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.控制台上的中文全是乱码。

但实际上不是乱码只是显示出是乱码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: