我正在從使用異構服務(通過ODBC)訪問SQL Server上的數據的VMS上的Oracle將數據遷移到通過Oracle Gateways訪問SQL Server的Oracle上dg4msql)。 Oracle VMS數據庫使用了WE8ISO8859P1字符集。 AIX數據庫使用WE8MSWIN1252。根據sp_helpsort,SQL Server數據庫使用「Latin1-General,不區分大小寫,區分變音,對kanatype不敏感,對Unicode數據不敏感,對非Unicode數據,代碼頁1252的SQL Server排序次序爲52」。 SQL Server數據庫使用nchar/nvarchar或所有字符串列。Oracle網關,SQL Server和Application Express的字符集問題
在Application Express中,某些情況下會出現額外字符,例如123顯示爲%001%002%003。在sqlplus中,事情看起來不錯,但如果我使用Oracle函數(如initcap),當查詢sql server數據庫(使用數據庫鏈接)時,我會看到字符串每個字母之間顯示的空格。這在舊配置下不會發生。
我假設問題是nchar中有額外的字節,Oracle中的字符集無法將其轉換。看來,ODBC解決方案不支持nchars,所以必須將它們轉換回char,並且它們顯示正常。我只需要查看sql服務器數據,所以我打開任何解決方案,如鑄造,但我還沒有找到任何工作。
有關如何處理此問題的任何想法?我應該在Oracle中使用不同的字符集嗎?如果是這樣,是否適用於所有模式,因爲我只關心其中的一個。
更新:我想我可以簡化這個問題。 SQL Server表使用nchar。從表中選擇轉儲(列)返回值Typ = 1 Len = 6:0,67,0,79,0,88當值爲'COX'時,無論從遠程鏈接選擇到sql server,轉換字面值'COX'到nvarchar,或作爲nvarchar複製到Oracle表中。但是當我選擇列本身時,只有在從遠程sql服務器鏈接中選擇時纔會出現額外的空格。我不明白爲什麼轉儲會返回相同的東西,但不使用轉儲會顯示不同的值。任何幫助表示讚賞。
我會添加找到適當的排序規則(可能來自Oracle NLS Lang FAQ),並在COLLATE的視圖中明確定義翻譯。 –
2010-06-02 03:27:52
這裏有任何幫助嗎? :) http://stackoverflow.com/questions/36393449/special-characters-in-oracle-nclob – 2016-05-03 13:39:58