gpt4 book ai didi

Hibernate/JPA import.sql utf8 字符损坏

转载 作者:行者123 更新时间:2023-12-04 00:42:40 24 4
gpt4 key购买 nike

我正在使用 import.sql 将我的开发数据写入数据库。我使用的是 MySQL Server 5.5,我的 persistence.xml 在这里:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="MobilHM" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>tr.com.stigma.db.entity.Doctor</class>
<class>tr.com.stigma.db.entity.Patient</class>
<class>tr.com.stigma.db.entity.Record</class>
<class>tr.com.stigma.db.entity.User</class>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<!-- Auto detect annotation model classes -->
<property name="hibernate.archive.autodetection" value="class" />
<!-- Datasource -->
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="mobilhm" />
<property name="hibernate.connection.password" value="mobilhm" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/mobilhm" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>

我的 import.sql 中的某些字符在 DB 中未正确显示。例如,字符 ü 在 db 中变为 ü。 mysql 中的默认字符集是 utf-8,我正在创建表
CREATE TABLE doctor (doctorId int unsigned NOT NULL AUTO_INCREMENT, name varchar(45) NOT NULL, surname varchar(45) NOT NULL, PRIMARY KEY (doctorId)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

奇怪的是,如果我使用 Mysql 导入/导出管理器导入数据是正确的,但使用 hibernate.hbm2ddl.auto=create 会使字符损坏。

我该如何解决这个问题?

编辑:
我也试过添加
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.connection.characterEncoding"
value="UTF-8" />
<property name="hibernate.connection.charSet" value="UTF-8" />

到persistence.xml。但它没有帮助。

使固定:
我最终解决了它。我正在使用 Tomcat,这是不是 hibernate 或 mysql 的损坏点。我已经用 set JAVA_OPTS=-Dfile.encoding=UTF-8 命令启动了它,我的问题就消失了。

问题的标题现在变得具有误导性。对不起。

最佳答案

在为该文件创建阅读器时,Hibernate 使用 new InputStreamReader(stream);直接,无需显式编码(假定/使用默认执行平台字符集编码)。

因此,换句话说,您的 import.sql文件必须采用默认执行平台字符集编码。

有一个旧的(2006!) Unresolved 问题,以防万一有人希望发送补丁:https://hibernate.atlassian.net/browse/HBX-711

修复选项:

  • 添加 -Dfile.encoding=UTF-8JAVA_OPTS环境变量,例如:
    # Linux/Unix
    export JAVA_OPTS=-Dfile.encoding=UTF-8
    # Windows
    set JAVA_OPTS=-Dfile.encoding=UTF-8

    # Attention, check before if your JAVA_OPTS doesn't already have a value. If so,
    # then it should be
    export JAVA_OPTS=$JAVA_OPTS -Dfile.encoding=UTF-8
    # or
    set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8
  • 在您的 中设置属性Maven 插件(可能是 surefirefailsafe 或其他,取决于您如何运行导入 hibernate 文件的代码)。 surefire 的示例:
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
    <argLine>-Dfile.encoding=UTF8</argLine>
    </configuration>
    </plugin>
  • 毕业 : 要在 gradle 添加此属性添加 systemProperty 'file.encoding', 'UTF-8'到任务配置块。 ( Thanks @meztihn )
  • 关于Hibernate/JPA import.sql utf8 字符损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8966030/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com