6

JSFEclipseLink JPA to MySQLデータベースを使用する Web アプリケーションに大きな問題があります。

データベースからデータを読み取ると、JSF は文字を UTF-8 OK で読み書きします。しかし、データベースの文字は悪いです。

fe: 入力文字: "żźćółzxcv"、データベースに記述: "???????zxcv"。しかし、たとえば「żźćółzxcv」のように手動でデータベースにデータを書き込む場合、JSF での読み取りは完璧です。

ここからすべてを試しました:PrimeFaces入力コンポーネントを介して取得されたUnicode入力が破損する

そして、JSFでのエンコーディングは問題ないことを発見しましたが、手動で設定した場合、問題はJavaにあります

current.setUwagiZ("żźćóżźćłąśóżźćł TE");
getFacade().edit(current);

in データベース レコードが間違っています:???ó??????ó???? TE

JDBC リソースに characterEncoding と useUnicode を設定しました。また、NetBeansエンコーディングでいくつかのツールでコマンドを実行してもOKで、MySQLのデータがUTF-8であるため、接続は問題ないようです。

問題はJavaですが、これを解決する方法がまったくわかりません:(

4

1 に答える 1

8

メッセンジャー自体がトランスポートの両側で使用される文字エンコーディングを認識している場合、疑問符が発生する可能性があります。そこがモジバケとの違いで、メッセンジャーのせいではなく、生産者や消費者のせいです。

データベース バックエンドを備えた平均的な Web アプリケーションでは、これが発生する可能性のある場所は、DB との通信と HTTP クライアントとの通信の 2 つだけです。すでに HTTP 部分を除外しているため、DB 部分を残しました。

DB 部分のメッセンジャーは JDBC ドライバーです。JDBC ドライバーに UTF-8 を使用するように指示する必要があります。MySQL JDBC ドライバーは、デフォルトでクライアント プラットフォームのデフォルト エンコーディングを使用することが知られています。これは、特定のケースでは明らかに UTF-8 ではありません。

次の 2 つのプロパティを JDBC 接続に追加します。

  • useUnicode=true
  • characterEncoding=UTF-8

JDBC 接続をどのように構成したかは不明ですが、「プレーン バニラ」JDBC の場合は、JDBC URL でクエリ文字列として指定します。

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

または、コンテナー固有のデータソース構成の場合は、ユーザー名とパスワードを指定するのとまったく同じ方法で、それらを個別の接続プロパティとして指定します。

以下も参照してください。

于 2013-02-04T13:36:02.680 に答える