27

私のシステムはLinuxMandriva、RDBMS- MySQL5で動作します。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 |
4

9 に答える 9

59

エンコーディングを使用してデータベースを作成することもできます。データベース/テーブルの作成に
使用するだけです。phpMyAdmin

UTF8 を使用して接続するために、休止状態設定の URL で指定する URL パラメーターがいくつかあります。

<!-- 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、好みのエンコーディングでテーブルを作成できます。データベースを特別なエンコーディングに設定する必要はありません。

セバスチャン

于 2012-10-25T07:56:12.813 に答える
18

エンコーディングを UTF-8 に変更するにはどうすればよいですか?

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-04-15T20:24:43.560 に答える
15

次のように接続 URL 構成を変更することを検討してください。

<property name="hibernate.connection.url">
    jdbc:mysql://localhost/yourdatabase?UseUnicode=true&amp;characterEncoding=utf8
</property>

それは事件を解決します。

于 2014-01-18T17:40:09.887 に答える
6

まず、Java側では、utf8ではなくUTF-8を指定する必要があります。ここの表を参照してください。

次に、characterEncodingテーブルが作成される文字セットではありません。これは、データベースとの通信およびデータベースとのデータの読み取り/書き込み中に使用される文字セットです。

MySQL Docsによると、テーブルの作成中に、これらの点で何も指定されていない場合はDB文字セットが使用されます。つまり、これを可能にするには、データベース(MySQLサーバーではない)を次のように作成する必要があります。

create database DB_NAME character set utf8;

その後、このデータベースのテーブルはutf8エンコーディングで作成する必要があります。照合と同じ話。

ただし、もちろん、Hibernateのhbm2ddlに依存するべきではありません。詳細については、こちらをお読みください。

于 2012-10-25T07:56:56.433 に答える
4

Spring Boot を使用する場合:ファイルの次の行にcharacterEncoding=utf8パラメーターを追加します。application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
于 2019-02-19T05:31:44.443 に答える
1

データベース照合の変更はどうですか?

ALTER DATABASE [データベース] CHARACTER SET utf8 COLLATE utf8_unicode_ci;

于 2016-12-07T07:21:52.763 に答える