हम नीचे स्ट्रिंग जो वास्तव में DB में एक नाम है को बचाने के लिए, हम कुछ API कॉल कर सकते हैं और हम इस नाम मिल कोशिश कर रहे हैं ले जा:चरित्र 6 बाइट्स
株式会社 エ ス · ダ ブ リ ュ ー · コ ミ ュ ニ ケ ー シ ョ ン ズ
जबकि हमारे कोड के माध्यम से बचत (सर्वलेट में के रूप में - - हाइबरनेट डेटाबेस), हम कोई त्रुटि मिलती है:
Caused by: java.sql.BatchUpdateException: ORA-12899: value too large for column "NAME_ON_ACCOUNT" (actual: 138, maximum: 100)
इस 23 अक्षर है, लेकिन लगता है कि यह चरित्र प्रति 6 बाइट्स ले रहा है, यह है कि केवल यह 138
+०१२३५१६४१०६१ होगाकोड नीचे मुझे 69 देता है:
byte[] utf8Bytes = string.getBytes("UTF-8");
System.out.println(utf8Bytes.length);
और यह मुझे 92 देता है:
byte[] utf8Bytes = string.getBytes("UTF-32");
System.out.println(utf8Bytes.length);
मैं निश्चित रूप से NLS_CHARACTERSET
की जाँच करें और आईओ कक्षाएं देखते हैं लेकिन क्या तुमने कभी एक चरित्र 6 बाइट्स लेने देखा है होगा? किसी भी प्रकार के मदद की बहुत सराहना की जाएगी।
इस पढ़ें और देखें अगर यह मदद करता है: http://stackoverflow.com/questions उपरोक्त लिंक के लिए/6063148/जावा-यूनिकोड-जहां-टू-खोज-उदाहरण-एन-बाइट-यूनिकोड-वर्ण – Crontab
+1। उल्लेख के बारे में ध्यान दें ([इस उत्तर] [http://stackoverflow.com/a/6066442/240733) पर टिप्पणी [) सीईएसयू -8 एन्कोडिंग **] (http: //en.wikipedia .org/विकी/सीईएसयू -8), जो ओरेकल डीबी का उपयोग करने के लिए कहा जाता है और जिसके परिणामस्वरूप 6-बाइट "यूटीएफ -8" वर्ण हो सकते हैं। – stakx
क्या आप CHINESE_CHINA.WE8ISO8859P1 का उपयोग कर रहे हैं? –