2013-09-27 8 views
12

पर उपयोग Unicode = true और characterEncoding = utf8 गुणों को कैसे सेट करें I वर्तमान में एक स्प्रिंग एमवीसी वेबपैप का निर्माण कर रहा हूं और डेटाबेस महत्वपूर्ण बैकएंड हिस्सा है। हालांकि, किसी भी कारण से, वसंत डेटा को यूटीएफ -8 के रूप में संसाधित करने से इनकार कर रहा है। चूंकि विचार, संसाधन और ब्राउज़र यूनिकोड पर सेट हैं, और इसलिए डेटाबेस में सारणीएं हैं (और कुछ समान प्रश्नों को भी पढ़ना), मैंने पाया है कि समस्या डेटाबेस कनेक्शन में निहित है। हाँ को और characterEncoding (सेट UTF8) को useUnicode (सेट ऐसा लगता है, तथापि, यह असंभव हैस्प्रिंग-प्रबंधित MySQL जेडीबीसी कनेक्शन

JDBC एक है:

JDBC ड्राइवर connectionProperties में दो आइटम प्रदान की जानी चाहिए।। सेम, और इस तरह के रूप में एक 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 निर्दिष्ट, my.ini फ़ाइल (और MySQL Workbench) के साथ खेला utf8 चारसेट डिफ़ॉल्ट डेटाबेस में सब कुछ के लिए मजबूर करने, और कुछ है कि सबसे बड़ा सिरदर्द का कारण: <property name="connectionProperties" value="useUnicode=yes;characterEncoding=utf8" /> जोड़ने। बाहर निकलता है, यह दो कनेक्शनों को सेट करने के लिए सचमुच असंभव है, क्योंकि एक भी बीन के भीतर प्रजनन नहीं है ... क्योंकि useUnicode के मान के रूप में yes;characterEncoding=utf8 को सेट करने की कोशिश के रूप में बीन इसे पढ़ने का प्रयास करेगा)। तो मेरा सवाल है: मैं utf8 कैसे करता हूँ?

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

और यह भी: आप एक साधारण जावा ग्राहक (सांत्वना आवेदन) डीबी से कनेक्ट होता है की कोशिश की

+0

शायद आपको यहां वर्णित 'characterEncoding = utf8' के बाद अर्धविराम की आवश्यकता है, जैसा कि यहां बताया गया है: http://stackoverflow.com/questions/13359683/how-to-use-useunicode-yes-characterencoding-utf-8-with- dbcp – GriffeyDog

+0

@GriffeyDog मैं वहां अर्धविराम डालता हूं, मैं इसे कोड से कॉपी नहीं कर रहा था। यह मुझे बिना किसी संकलन की भी अनुमति देगा (ठीक है, यह होगा - लेकिन मुझे जल्द ही अपवाद मिलेगा)। –

उत्तर

23

समस्या UTF8 और नहीं UTF-8 निर्दिष्ट करने की वजह से हो सकता है। Using Character Sets and Unicode से:

क्लाइंट पक्ष पर वर्ण एन्कोडिंग निर्दिष्ट करते समय, जावा-शैली के नामों का उपयोग करें। निम्न तालिका UTF-8 लिए MySQL वर्ण सेट के नाम और इसी जावा शैली नामों को सूचीबद्ध करता है ...

और UTF8 नक्शे।

JDBC: निम्नलिखित JDBC यूआरएल प्रयास करें mysql: // स्थानीय होस्ट: 3306/useUnicode = हाँ & characterEncoding = UTF-8

+0

यह काम करता है, धन्यवाद। – egemen

5

आप की कोशिश की? क्या यूटीएफ -8 इस मामले में काम करता है?

+0

मैंने अभी तक आपके समाधान का प्रयास नहीं किया है, इसका कोई फायदा नहीं हुआ है। एक साधारण कंसोल एप्लिकेशन के लिए - मेरे पास अभी तक नहीं है (अभी तक)। मैं जल्द ही। –

+0

क्या आप कॉन्फ़िगरेशन के साथ त्रुटियों (यदि कोई हैं) के बारे में अधिक विशिष्ट हो सकते हैं? आप किस बीन को कॉन्फ़िगर करते हैं? ('<बीन क्लास =" ... ">') –

+0

कोई त्रुटि नहीं है, यह एक मुद्दा है! केवल एक ही मुझे मिल रहा है जब मैं एक एकल संपत्ति मान निर्दिष्ट करने का प्रयास करता हूं। जैसा ऊपर बताया गया है। और मैं एक बीन को कॉन्फ़िगर कर रहा हूं जिसे मैंने डेटा स्रोत नाम दिया है, कक्षा 'org.springframework.jdbc.datasource.DriverManagerDataSource', और ऊपर वर्णित गुणों के साथ। –

4

ध्यान दें कि अगर आप स्प्रिंग बूट का उपयोग कर रहे हैं, तो आप क्या कर सकते हैं यह आपके कनेक्शन स्ट्रिंग में अतिरिक्त पैरामीटर जोड़ने के बजाय application.properties के भीतर गुणों का उपयोग करके:

इसे एप्लिकेशन में रखें।गुण:

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

धन्यवाद। यह सब से सबसे अच्छा जवाब है। मेरे पास स्प्रिंग जेपीए है; हाइबरनेट और एम्बेडेड एच 2 डीबी और आयात.sql से लोड होने पर हर बार, एन्कोडिंग गड़बड़ हो गई थी। – Kefirchiks

+0

यह मेरे लिए काम नहीं करता है और मैं उत्सुक हूं कि यह किसी और के लिए कैसे काम कर सकता है। आधिकारिक दस्तावेज भी संभावित मानकों की सूची में इसका उल्लेख नहीं करता है: https://docs.spring.io/spring-boot/docs/1.5.x/reference/html/common-application-properties.html –

+0

यह संपत्ति स्प्रिंग बूट 1.4 और उसके बाद में अब मौजूद नहीं है। Https://stackoverflow.com/questions/40250678/set-jpa-utf-8-encoding-in-application-properties/40255073#40255073 –

2

स्प्रिंग-बूट + एम्बेडेड एच 2 + हाइबरनेट का उपयोग करते समय मैं एक ही मुद्दा था, लेकिन समस्या 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 कॉन्फ़िगरेशन फ़ाइल & बदल दी है यह एक आकर्षण की तरह काम करता है। यदि आप लिनक्स में हैं (मैं उबंटू में हूं, मुझे यकीन है कि विंडोज़ के लिए एक फाइल है) फ़ाइल /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 सेवा को पुनरारंभ करना न भूलें।

संबंधित मुद्दे