当前位置: 首页 > 面试题库 >

Hibernate + MySQL:如何设置数据库和表的编码utf-8

祁绪
2023-03-14
问题内容

我的系统在 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用于数据库/表创建。

您可以在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&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;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,则可以使用您喜欢的编码来简单地创建表。无需将数据库设置为特殊编码。

塞巴斯蒂安



 类似资料:
  • 我的变更集如下所示 我已经使用插件将liquibase与集成在一起 当我运行时,它会创建表,类似于

  • 我有一个jsp文件,在那里我收集表单值,并通过jQuery Ajax将其发送到strut 2 action class。 我的Ajax函数看起来像 当我解码并提醒它的文本我正确编码和解码。 当我通过ajax将其发送到struts2时,它会产生问题。 我已经检查了Interceptor中的值它显示值??????? 拦截器 在我的jsp文件中,我将内容类型设置为UTF-8,在ajax中,我也检查了内容

  • 控制台输出中的西里尔符号显示不正确。Jenkins正在Windows 7上运行Tomcat/8.5.11 Jenkins属性显示: file.encoding cp1251 sun.jnu.encoding cp1251 sun.stderr.encoding cp866 sun.stdout.encoding cp866 解决了:我在bin文件夹中创建了文件setenv.bat并设置java_o

  • 本文向大家介绍php页面,mysql数据库转utf-8乱码,utf-8编码问题总结,包括了php页面,mysql数据库转utf-8乱码,utf-8编码问题总结的使用技巧和注意事项,需要的朋友参考一下 示例一: PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码问题 点击编辑

  • 问题内容: 我有一个PHP脚本,名为: http://cyber- flick.com/apiMorpho.php?method=getMorphoData&word=kot 以纯文本显示一些数据: 如您所见,在适当的字符位置上有很多“忙碌”。我想做的是以某种方式显示此内容,以便人们在浏览器中看到正确的UTF-8字符。 您可以将其封装在HMTL标签中并以元UTF-8编码进行设置,但是由于将从该脚本

  • 我使用@FormUrlEncoded发送到服务器。当我向服务器发送字符串时,我得到如下请求体 所以我找到了加法器。拦截器 ApiInterface接口 但它不起作用。英语和数字都可以,但不是我的语言。如何修复它?我也试过设置-