2014-10-17 51 views
1

我必須開始說我不是Oracle用戶專家,所以我有一些難以理解的基礎知識:D。我們的應用程序是一個使用Nhibernate db連接的MVC應用程序。問題在於,當我們試圖將'ѼóÂ'這樣的字符保存到NVARCHAR2字段時,它們被保存爲問號'?'。爲了解決這個問題,我們將其更改爲數據庫中的其他字符集。NLS_NCHAR_CHARACTERSET說明

這是我們的NLS_DATABASE_PARAMETERS在安裝:

NLS_LANGUAGE     AMERICAN         
NLS_TERRITORY     AMERICA         
NLS_CURRENCY     $           
NLS_ISO_CURRENCY    AMERICA         
NLS_NUMERIC_CHARACTERS   .,          
NLS_CHARACTERSET    EE8ISO8859P2        
NLS_CALENDAR     GREGORIAN         
NLS_DATE_FORMAT    DD-MON-RR         
NLS_DATE_LANGUAGE    AMERICAN         
NLS_SORT      BINARY         
NLS_TIME_FORMAT    HH.MI.SSXFF AM       
NLS_TIMESTAMP_FORMAT   DD-MON-RR HH.MI.SSXFF AM     
NLS_TIME_TZ_FORMAT    HH.MI.SSXFF AM TZR      
NLS_TIMESTAMP_TZ_FORMAT  DD-MON-RR HH.MI.SSXFF AM TZR    
NLS_DUAL_CURRENCY    $           
NLS_COMP      BINARY         
NLS_LENGTH_SEMANTICS   BYTE          
NLS_NCHAR_CONV_EXCP   FALSE          
NLS_NCHAR_CHARACTERSET   AL16UTF16 
NLS_RDBMS_VERSION    10.2.0.4.0    

淵源NLS_CHARSET是EE8ISO8859P2,我們把它改爲:AL32UTF8(完美的作品)。問題是不是NLS_NCHAR_CHARACTERSET suposed來處理像nvarchar2字段的那些特殊字符?如果沒有,那麼有人可以向我解釋它的追求嗎?

編輯:NLS_LANG設置爲:POLISH_POLAND.AL32UTF8

回答

3

國家Charaterset在更早的時候使用,即統一是可用之前。主要想法是在共同的Charaterset中存儲VARCHAR2/CHAR的獨立語言項目(包括任何源代碼等),並且具有針對客戶的特定國家/地區(即特定於語言的國家/地區)NVARCHAR2/CHAR

在我看來,現在沒有理由使用它,因爲AL32UTF8(或任何其他Unicode編碼)無論如何都能夠存儲任何字符。

也許當你在非西方語言中工作時,像AL16UTF16AL32UTF32這樣的國家字符集在存儲和效率方面略有好處。

關於你的問題:National Charaterset AL16UTF16能夠存儲任何Unicode字符,所以你的波蘭字符應該沒有問題。但是,也許您的客戶端應用程序(或選定的字體)無法顯示此類字符

+0

Thx供您參考。波蘭信件在這裏並不是他們存儲的問題。在cyrylic中的字母是,但如果你說的是真實的,NLS_CHARACTERSET是未來需要關注的主要問題,再次感謝你:) – AdrianCogiel 2014-10-17 14:14:55

+0

* National Charaterset'AL16UTF16'能夠存儲任何Unicode字符,所以你的波蘭語字符應該沒有問題。* - 在問題中給出的三個字符中 - 只有第二個字符是波蘭語。 – 2017-02-17 12:51:51