7

UTF-8 文字に問題があります。これは単純な JSF プロジェクトです。JSF 2.2 と Glassfish 4.0 を使用しています

私が行く方法があります:

em.persist(user);

デバッグするとき

user.getName()

この時点で、IDE に utf-8 文字が表示されます。また、文字列をセッション-Beanに保持し、ブラウザーでも問題なく表示できます。

DB に永続化される場合のみ、次のように永続化されます: ?????

DB を自分で編集して、utf-8 文字を保存することもできます。つまり、私の SQL 構成は UTF-8 に適しています。

問題はJPAのどこかにあります。

これは私が試したことです:(すべて一緒に:)

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="Persistence" transaction-type="JTA">
        <jta-data-source>fus</jta-data-source>
        <class>com.tugay.fup.core.model.User</class>
        <properties>
            <property name="javax.persistence.jdbc.url"
                  value="jdbc:mysql://localhost:3306/fus?useUnicode=yes&amp;characterEncoding=UTF-8"/>
        </properties>
    </persistence-unit>
</persistence>

これは、glassfish-web.xml です。

<glassfish-web-app>
    <parameter-encoding default-charset="UTF-8"/>
</glassfish-web-app>

そして、コンテナで管理されているEntityManagerを使用しています(トランザクションタイプ= JTA)

したがって、Glassfish の JDBC 接続プールには次のものがあります。

jdbc:mysql://localhost:3306/fus?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8

対象: プロパティ: URL...

ただし、これらのどれも役に立ちません。

静止文字が正しく保持されません。

4

2 に答える 2

12

Glassfish を使用する場合、これらのプロパティを JDBC 接続プールの追加として設定できます。Web 管理でデータベース接続を見つけて表示します ([リソース] -> [JDBC 接続プール] -> [your.connection])。追加のプロパティ タブで、前述のプロパティを追加し (まだ存在しない場合)、サーバーを再起動します。

//name, value
characterEncoding, UTF-8
characterSetResults, UTF-8
useUnicode, true

パラメータを URL に追加しても結果は同じになりますが、私の意見では、これはより保守しやすいソリューションです。

于 2013-12-12T14:46:33.047 に答える
7

これで解決しました:

jdbc:mysql://localhost:3306/fus?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

だからこれは間違っていた:

jdbc:mysql://localhost:3306/fus?useUnicode=true&connectionCollat​​ion=utf8_general_ci&characterSetResults=utf8

于 2013-10-04T21:44:45.833 に答える