26

私は現在、Spring MVC webapp を構築しており、データベースは重要なバックエンド部分です。ただし、何らかの理由で、Spring はデータを UTF-8 として処理することを拒否しています。ビュー、リソース、およびブラウザーが Unicode に設定されているため、データベース内のテーブルも同様に設定されているため (同様の質問をかなり読んでいます)、問題はデータベース接続にあることがわかりました。

JDBC ドライバーには、 connectionPropertiesで次の 2 つの項目を提供する必要があります: useUnicode ( yesに設定)と characterEncoding ( utf8に設定) 。

JDBC は Bean であり、次のように XML ファイルを介して構成されます。

<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/<database>" />
<property name="username" value="<not telling>" />
<property name="password" value="<not telling>" />

この設定では、データベースから取得した英数字以外のすべての文字 (矢印やギリシャ文字など) を疑問符に変換します。これは明らかに受け入れられません。

私は複数の解決策を試しました: JDBC URL を として指定し、ファイル (および MySQL Workbench)jdbc:mysql://localhost:3306/<database>?useUnicode=yes&amp;characterEncoding=utf8で再生して、データベース内のすべてを強制的に文字セットにデフォルト設定し、最大の頭痛の種である. 結局のところ、単一の Bean 内に 2 つの connectionProperties を設定することは文字通り不可能です。なぜなら...どこにも言及されている区切り文字がないためです (Bean は、 の値として設定しようとしてそれを読み取ろうとします)。私の質問は次のとおりです。my.iniutf8<property name="connectionProperties" value="useUnicode=yes;characterEncoding=utf8" />yes;characterEncoding=utf8useUnicode

4

5 に答える 5

38

この問題は、 UTF-8 ではなくutf8を指定したことが原因である可能性があります。文字セットと Unicode の使用から:

クライアント側で文字エンコーディングを指定するときは、Java スタイルの名前を使用します。次の表に、MySQL 文字セット名と対応する Java スタイル名を示します...

utf8はUTF-8にマップされます。次の JDBC URL を試してください。

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

于 2013-12-06T11:50:54.977 に答える
11

Spring Boot を使用している場合はapplication.properties、接続文字列に追加のパラメーターを追加する代わりに、プロパティを使用してこれを実行できることに注意してください。

これをapplication.propertiesに入れます:

spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8;
于 2016-04-13T15:14:38.350 に答える
6

試しましたか:

<property name="connectionProperties">
    <props>
        <prop key="useUnicode">yes</prop>
        <prop key="characterEncoding">utf8</prop>
    </props>
</property>

また、DB に接続する単純な Java クライアント (コンソール アプリケーション) を試しましたか? この場合、UTF-8 は機能しますか?

于 2013-09-27T14:09:27.797 に答える