2013-09-27 12 views
12

現在、私はSpring MVC Webアプリケーションを構築しており、データベースは重要なバックエンド部分です。しかし何らかの理由で、SpringはUTF-8としてデータを処理することを拒否しています。ビュー、リソース、ブラウザーはUnicodeに設定されているので、データベースのテーブルも同様です(同様に質問するとかなり似ています)。データベース接続に問題があることを確認しました。Spring管理MySQL JDBC接続でuseUnicode = trueおよびcharacterEncoding = utf8プロパティを設定する方法

JDBCドライバがて、ConnectionPropertiesに2つの項目に提供する必要があります。。useUnicode(はいに設定し、characterEncoding(UTF8に設定する)ことが判明、しかし、それは不可能

JDBCがあります豆、そのようにそうように、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:mysql://localhost:3306/<database>?useUnicode=yes&amp;characterEncoding=utf8としてJDBC URLを指定し、utf8文字セットをデフォルトにするために、データベース内のすべてを強制的にmy.iniファイル(およびMySQLのワークベンチ)と共演、そして最大の頭痛の原因となった何か:<property name="connectionProperties" value="useUnicode=yes;characterEncoding=utf8" />を追加します。 1つのbean内に2つのconnectionPropertiesを設定することは文字通り不可能です。なぜなら...どこにも分かれていない分離文字があるからです(beanはそれをuseUnicodeの値としてyes;characterEncoding=utf8に設定しようとします)。だから私の質問は:どのようにutf8ですか?

+0

「characterEncoding = utf8」の後にセミコロンが必要なのかもしれません。http://stackoverflow.com/questions/13359683/how-to-use-useunicode-yes-characterecoding-utf-8-with- dbcp – GriffeyDog

+0

@GriffeyDog私はそこにセミコロンを置いていますが、コードからコピーしていませんでした。それも私も1つなしでコンパイルすることはできません(まあ、それは - しかし、私はすぐ後に例外を得るだろう)。 –

答えて

23

utf8で、ではなく、UTF-8を指定すると問題が発生する可能性があります。 Using Character Sets and Unicode

クライアント側で文字エンコーディングを指定する場合は、Javaスタイルの名前を使用します。次の表は、UTF-8にマップ

UTF8 ... MySQLの文字セット名と、対応するJavaスタイルの名前が表示されます。

ます。jdbc:以下のJDBC URLを試してみてくださいmysqlの:// localhostを:?あなたは春のブートを使用している場合は、あなたが行うことができます3306/useUnicode = yesの& characterEncoding = UTF-8

+0

それは動作します、ありがとう。 – egemen

5

あなたがしようとしました:

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

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

+0

私は今あなたのソリューションを試してみましたが、無駄です。 単純なコンソールアプリケーションの場合 - 私は(まだ)持っていません。私はすぐ。 –

+0

設定のエラー(存在する場合)の詳細について教えてください。また、どのBeanを設定しましたか? ( '') –

+0

エラーは全くありません。これが問題の1つです!私が得るのは、単一のプロパティ値を指定しようとするときだけです。上記のように。また、私はdataSourceという名前のbeanを、org.springframework.jdbc.datasource.DriverManagerDataSource'というクラスと上記のようなプロパティーを設定しています。 –

4

注意接続文字列に余分なパラメータを追加するのではなく、application.propertiesのプロパティを使用します。

これをアプリケーションに入れます。プロパティ:

spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8; 
+0

ありがとうございます。これはすべてからの最良の答えです。私はSpring JPAを持っています。 Hibernate&Embedded H2 dbとimport.sqlからロードされるたびに、エンコーディングが乱されました。 – Kefirchiks

+0

これは私にとってはうまくいかず、他の人にとってどのように機能するのか不思議です。公式ドキュメントには、可能なパラメータのリストにもその情報が記載されていません。https://docs.spring.io/spring-boot/docs/1.5.x/reference/html/common-application-properties.html –

+0

このプロパティSpring Boot 1.4以降では存在しなくなりました。 https://stackoverflow.com/questions/40250678/set-jpa-utf-8-encoding-in-application-properties/40255073#40255073 –

2

春ブーツ+組み込みH2 +休止を使用している間、私は同じ問題を持っていましたが、問題は、SQLスクリプトを読んだ瞬間にありました。 (data.sql)データベースのエンコーディングは、私が外国語を読むたびに破られました。それが可能である

spring.datasource.sqlScriptEncoding=UTF-8

場合は、コンソールにアクセスし、手動でいくつかのデータを追加します。私のapplication.propertiesに次の行を追加し

は、問題を解決しました。外国の文字が正しい方法で表示されている場合。その後、この解決策がうまくいくかもしれません。

私はここで解決することを見出した:

http://ufasoli.blogspot.com/2014/07/spring-boot-jpa-broken-encoding-on.html

+0

私のために働いています –

0

は私がUTF-8のテーブルを生成するための時間を無駄にしました。上記のうちのどれも私のために働かなかった。最後に私はmysql設定ファイル&を変更しました。それは魅力的です。あなたがLinuxにいる場合(私はubuntuにいますが、Windows用のファイルがあると確信しています)、/etc/mysql/my.cnfファイルを開いて次のコードを追加してください。

[client] 
default-character-set=utf8 

[mysql] 
default-character-set=utf8 


[mysqld] 
collation-server = utf8_unicode_ci 
init-connect='SET NAMES utf8' 
character-set-server = utf8 

mysqlサービスを再起動することを忘れないでください。

関連する問題