我的系统运行在Linux Mandriva,RDBMS - MySQL 5上。我需要在UTF-8中创建数据库和表。
以下是hibernate.cfg.xml的一个片段-
...
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
...
my.cnf -
# The MySQL server
[mysqld]
...
default-character-set=cp1251
character-set-server=cp1251
collation-server=cp1251_general_ci
init-connect="SET NAMES cp1251"
skip-character-set-client-handshake
...
[mysqldump]
...
default-character-set=cp1251
...
例如,某些类-
@Entity
@Table(name = "USER")
public class User {
@Id
@Column(name = "USERID")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "USERNAME")
private String name;
@Column(name = "USERPASSWORD")
private String password;
@Column(name = "USERIP")
private String ip;
// getter's and setter's here
...
但是当生成这些表时,我看到了latin1的编码示例-
SHOW CREATE TABLE USER;
USER | CREATE TABLE `user` (
`USERID` int(11) NOT NULL auto_increment,
`USERIP` varchar(255) default NULL,
`USERNAME` varchar(255) default NULL,
`USERPASSWORD` varchar(255) default NULL,
PRIMARY KEY (`USERID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
如何将编码更改为UTF-8
如果您能提供信息,我将不胜感激!谢谢!
..。
这很奇怪,我已经全部改成了utf8 -
# The MySQL server
[mysqld]
...
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake
...
[mysqldump]
...
default-character-set=utf8
...
现在-
SHOW CREATE TABLE USER;
USER | CREATE TABLE `USER` (
`USERID` int(11) NOT NULL auto_increment,
`USERIP` varchar(255) default NULL,
`USERNAME` varchar(255) default NULL,
`USERPASSWORD` varchar(255) default NULL,
PRIMARY KEY (`USERID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 |
发布于 2012-10-25 15:56:13
您还可以使用编码创建数据库。
只需使用phpMyAdmin
创建数据库/表。
您可以在hibernate设置的URL中指定一些URL参数,以便使用UTF8进行连接:
<!-- Database Settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- for performance reasons changed to MyISAM from org.hibernate.dialect.MySQLInnoDBDialect -->
<property name="dialect">org.openmeetings.app.hibernate.utils.MySQL5MyISAMDialect</property>
<property name="connection.url">jdbc:mysql://localhost/openmeetings?autoReconnect=true&useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf-8</property>
<property name="hibernate.connection.CharSet">utf8</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>
仅当使用时,才需要将数据库中的整个编码设置为utf8
<!-- Database Scheme Auto Update -->
<property name="hbm2ddl.auto">update</property>
您必须将MySQL的默认编码设置为utf8。原因hbm2dll
将使用数据库的默认编码。
您可以仍然使用hbm2ddl.auto
,并手动修改数据库的表以使用utf8排序规则。
如果您没有使用hbm2ddl.auto
,那么只需使用您喜欢的编码创建表即可。不需要将数据库设置为特殊编码。
塞巴斯蒂安
发布于 2014-04-16 04:24:44
如何将编码改为UTF8?
我使用了一个本地方言类,它扩展了MySQLDialect
并更改了表类型字符串:
public class LocalMysqlDialect extends MySQLDialect {
@Override
public String getTableTypeString() {
return " DEFAULT CHARSET=utf8";
}
}
我实际上是在扩展MySQL5InnoDBDialect
类型,所以我实际上是在使用:
public class LocalMysqlDialect extends MySQL5InnoDBDialect {
@Override
public String getTableTypeString() {
return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
}
}
发布于 2014-01-19 01:40:10
考虑更改连接url配置,如下所示:
<property name="hibernate.connection.url">
jdbc:mysql://localhost/yourdatabase?UseUnicode=true&characterEncoding=utf8
</property>
它解决了这个问题。
https://stackoverflow.com/questions/13063372
复制相似问题