Ich habe eine Datenbank, die Benutzernamen nur auf Englisch im Moment speichert.PLSQL entschlüsseln NVARCHAR2 von BASE64 nach UTF-8
Ich möchte BASE64
& UTF-8
, um auch in anderen Sprachen zu speichern, zu übernehmen; Ich möchte es in einer Spalte des Typs NVARCHAR2
speichern.
Die Datenbankprozedur erhält den Namen in BASE64
, ich bin Decodierung es über UTL_ENCODE.BASE64_DECODE
& die Zeichenfolge VARCHAR2
UTL_RAW.CAST_TO_VARCHAR2
mit konvertieren. Aber ich bekomme Kauderwelsch zurück und nicht das eigentliche Wort.
Zum Beispiel bekomme ich 'aleks' als Name in BASE64
. Ich bin in der Lage, es zu entschlüsseln, aber die Besetzung zu VARCHAR2/NVARCHAR2
gibt den Wert nicht zurück: Ich bekomme nur Kauderwelsch.
Ich laufe auf Oracle 12c
mit NLS_CHARACTERSET WE8ISO8859P1
Hier ist der Code, den ich zu dekodieren verwenden:
DECLARE
lv_OrgUserName VARCHAR2(2000);
lv_encodedUserName VARCHAR2(2000);
lv_UserName VARCHAR2(2000);
BEGIN
lv_OrgUserName := 'алекс';
lv_encodedUserName := UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(lv_OrgUserName)));
DBMS_OUTPUT.PUT_LINE (lv_encodedUserName);
lv_UserName := UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW (lv_encodedUserName)));
DBMS_OUTPUT.PUT_LINE (lv_UserName);
END;
Wie kann ich dies zu überwinden?
Ich bestätige Code: es funktioniert für "normale Zeichen", wie 'abc', aber nicht für Exoten aus Ihrem Beispiel. –
@ J.Chomel, OK, wie kann ich es für exotische arbeiten lassen? –
Ich habe heute viel recherchiert, und ich konnte es nicht überwinden. Ich habe irgendwo gelesen, dass dies von Ihrem Client stammen könnte, der nicht korrekt eingestellt ist, um mit griechischen Zeichen umzugehen. Daher wird DBMS_OUTPUT niemals in der Lage sein, griechische Zeichen auszugeben, egal wie sehr Sie es versuchen. Aber das ist nicht endgültig, da ich es nicht gut verstehe! –