安裝oracle DB時,選擇的字符集:美國、英語、US7ASCII。oracle
在不設置nls_lang的狀況,插入中文,成功,但存進去的是亂碼,select看到也是??(不管後面再怎麼設置nls_lang),下面第2條記錄即是如此。第3條記錄是設置了nls_lang = American_america.us7ascii以後插入的。命令行
在命令行設置nls_lang爲zhs16gbk,與DB字符集不一樣ci
第2條自己存入的有問題,始終是??。亂碼
第3條查看時的nls_lang與DB的字符集不一樣,也與insert時設置的us7ascii不一樣,所以也是亂碼。select
設置NLS_LANG與DB的相同jdbc
能夠看到,設置與DB相同,insert and select都沒問題。im
啓動ODI以前,不設置nls_lang,使用jdbc驅動鏈接到DB上,查看錶的數據:數據
亂碼。db
設置nls_lang=American_america.us7ascii,並在同一命令行下啓動odi,繼續使用jdbc,查看數據:img
仍是亂碼。
在ODI的鏈接參數中,改成使用jdbc:odbc
查看數據:
正常。
若是設置nls_lang爲zhs16gbk,從新啓動ODI,則看到的數據:
仍然是亂碼。
結論
針對us7ascii字符集的oracle DB,須要在nls_lang中設置與DB相同的字符集,而後使用jdbc:odbc方式訪問DB,才能確保在ODI中看到的數據正常顯示。