本人閱讀了河北省統計局--賈書民網友的 "Oracle 和Developer/2000字符集的選擇和改變"后, 對其部分說法表示迷惑:
---- 迷惑1, 要正確處理漢字,一般有兩種方案可供選擇:
---- 方案一:使用US7ASCII字符集.
---- 方案二:使用ZHS16CGB231280字符集.
---- 照我的理解(本人用過兩年的Developer/2000), 并不一定只可使用這兩種字符集, 只要你寫forms時用的字符集和運行forms時用的字符集一樣即可(盡管我只用過WE8ISO8859P1和ZHS16CGB231280這兩種字符集).
---- 要害之處在于你啟動forms和運行forms一霎那, 注冊表HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE下的NLS_LANG 所表示的字符集一樣, 即可.
---- 迷惑2, 一旦數據庫創建之后, 數據庫的字符集是不能改變的, 假如要改變數據庫的字符集, 只有重新創建數據庫("還有后面一段很長的參考方法").
---- 其實不然, 要改變數據庫的字符集, 太簡單了, 你只需以sys的身份登陸Oracle, 然后: SQL > update PRops$ set value$='你想要的字符集' where name='NLS_CHARACTERSET';
---- SQL > commit;
---- 之后, 再關閉,重啟動數據庫即可.
---- 迷惑3.Developer/2000 字符集的改變(還有后面的一段說法).
---- 要想客戶端的forms程序運行時, 看到正常的字符(客戶端用的是Developer/2000 服務器端用Oracle),需要選擇相同的字符集; 否則, 至多你只能看到一處正常的字符(當你運行forms時的字符集與你編寫forms程序的字符集一樣, 則可看到客戶端forms程序正常的字符 當與Oracle的字符集一樣時, 則可看到Oracle正常的字符).
---- 另外, 也不是("所以,假如要修改源程序,還要對其中的漢字重新改寫"). 那多麻煩, 本人97年在襄樊市電信局作97工程時, 也遇過此類問題, 當時電信局計算機中心的周主任找到了其中的解決方法. 簡述如下:
---- (假設你用了WE8ISO8859P1字符集編寫了forms, 數據庫用的是ZHS16CGB231280, 現在要把這些forms程序的字符集改成和數據庫的一樣). 操作如下:
1.點擊菜單 File-- >administration-- >convert
2.type選擇Form, Direction選擇Binary-To-Text, Browse為某一用了WE8ISO8859P1字符集編寫了
forms的*.fmb.
3.點擊 Convert 按鈕, 把二進制的*.fmb改寫為文本文件*.fmt.
4.用 Edit 軟件把此 *.fmt 打開.
5.把里面的 NAME_SET = 31, CS = 31 改成 NAME_SET = 850, CS = 850
(原因 31 指的是 WE8ISO8859P1 字符集, 850 指的是 ZHS16CGB231280 字符集)
6.步驟如 2 不過把Direction選擇Text-To-Binary Browse 為剛才的 *.fmt
7.再重新生成此 *.fmb 為 *.fmx
---- 此時, 你再在注冊表中Oracle的字符集為ZHS16CGB231280下運行此程序, 就能看到正確的字符集.
---- 此步驟雖然稍有繁瑣, 但總比重新編寫程序快捷, 尤其是大批量的程序的時候. 另外, 你可以編寫一個小程序來代替步驟4,5. 需要注重的一點是一開始執行步驟2時前, 注冊表中Oracle的字符集應為WE8ISO8859P1 執行步驟6時前, 注冊表中Oracle的字符集應為ZHS16CGB231280.
---- 有愛好的朋友, 不妨照本人的說法試試.