2012-09-05 53 views

回答

2

有很多,你可以任意存儲數據的方式(在這種情況下,UTF編碼)在VARCHAR2領域:

  • 您可以在Unicode字符轉換爲其U+XXXX form或他們的&#YYYY形式。只有一些角色需要轉換。
  • 您可以存儲編碼的二進制數據rawtohex
  • 你也可以使用標準功能,如UTL_ENCODE.mimeheader_encode

    /* needs to be checked on a non-unicode db */ 
    SQL> declare 
        2  l nvarchar2(200); 
        3  p nvarchar2(200); 
        4 begin 
        5  l := UTL_ENCODE.MIMEHEADER_ENCODE (
        6  buf   => nchr(352),--'Š', 
        7  encode_charset => 'UTF8', 
        8  encoding  => UTL_ENCODE.QUOTED_PRINTABLE 
        9 ); 
    10  dbms_output.put_line('encoded string: ' || l); 
    11  p := utl_encode.mimeheader_decode (
    12  buf => l 
    13 ); 
    14  dbms_output.put_line('decoded string: ' || p); 
    15 end; 
    16/
    
    encoded string: =?UTF8?Q?=C5=A0?= 
    decoded string: Š 
    
    Statement processed. 
    
+0

我不認爲'utl_encode.mimeheader_encode'會工作,如果數據庫字符集不支持您試圖字符編碼。我希望字符集轉換已經將字符轉換爲數據庫字符集在調用函數之前支持的替換字符。 –

+0

@JustinCave:這個函數可以在非Unicode數據庫中使用NVARCHAR2嗎(我現在沒有權限訪問這樣的數據庫)? –

+0

我不相信有'NVARCHAR2'超載。你可能會使用'varchar2'傳入一個字符集,但我不確定這是否會在客戶端應用程序中工作 - 我期望字符集轉換能夠首先轉換字符集。 –

相關問題