我的系统在 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 |
您还可以使用编码创建数据库。 只需phpMyAdmin用于数据库/表创建。
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将会使用数据库的默认编码。
hbm2dll
您可能仍会使用hbm2ddl.auto,并手动修改数据库的表以具有utf8排序规则。
hbm2ddl.auto
如果您没有使用hbm2ddl.auto,则可以使用您喜欢的编码来简单地创建表。无需将数据库设置为特殊编码。
塞巴斯蒂安