Próbujemy uratować poniższy łańcuch, który jest w rzeczywistości nazwa w db, robimy pewne wywołania API i mamy tę nazwę:charakter biorąc 6 bajtów
株式会社 エ Sty · ダ ブ リ ュ ー · コ ミ Marrakech ニ ケ ー シ ョ ン ズ
While oszczędności za pośrednictwem naszego kodu (jak w serwletu - Hibernacja - baza danych), otrzymujemy błąd:
Caused by: java.sql.BatchUpdateException: ORA-12899: value too large for column "NAME_ON_ACCOUNT" (actual: 138, maximum: 100)
to 23 znaków, ale wygląda to przy 6 bajtów na znak, że to tylko żeby było 138.
Poniżej kod daje mi 69:
byte[] utf8Bytes = string.getBytes("UTF-8");
System.out.println(utf8Bytes.length);
I to daje mi 92:
byte[] utf8Bytes = string.getBytes("UTF-32");
System.out.println(utf8Bytes.length);
będę na pewno sprawdzić NLS_CHARACTERSET
i zobaczyć klas IO ale czy kiedykolwiek widział znak biorąc 6 bajtów? Każda pomoc będzie doceniana.
przeczytać i zobaczyć, czy to pomaga: http://stackoverflow.com/questions/6063148/java-unicode-where-to-find-example-n-byte-unicode-characters – Crontab
+1 dla powyższego linku. Zapamiętaj wzmiankę (w komentarzu do [tej odpowiedzi] (http://stackoverflow.com/a/6066442/240733)) z [kodowania CESU-8 **] (http: //en.wikipedia .org/wiki/CESU-8), o których mówi się, że Oracle DB używają i które mogą skutkować 6-bajtowymi znakami "UTF-8". – stakx
Czy używasz CHINESE_CHINA.WE8ISO8859P1? –