Linux上Sqlplus中文為「?」的解決辦法

2021-06-04 19:55:38 字數 1045 閱讀 7113

以前操作oracle資料庫時,一直用pl/sql developer。不得不服氣這個經驗,圖形介面能提高效率,但同時也讓乙個人變的懶惰。這次必須在linux上通過sqlplus來操作oracle,沒辦法「逼上梁山」了!但是隨後帶來乙個問題,就是在sqlplus上的中文全部都是問號。由於以後要更新中文到資料庫,因此這個問題必須是要解決的。網上有解決辦法,但是寫的不夠詳細。能順利解決的人,一定要有linux知識和oracle知識,因此我總結下,以後方便菜鳥們操作;

毫無疑問,出現這個問題的原因是資料庫服務端和客戶端的字符集不一致的原因。我們只要把中環境變數變下就可以了,但是我可不想每次登陸linux都修改這個變數,我也記不住,怎麼辦?慢慢道來。

第一步:oracle資料庫的字符集修改,那可不是好玩的事情,所以我們不打算改服務端的字符集。那就只能改客戶端了。好吧,我先查下oracle服務端的字符集,登陸sqlplus檢視服務端的字符集:select userenv("language") from dual,我這裡查詢的結果是:simplified chinese_china.zhs16gbk。

注意,「=」後邊的字符集要根據你自己的情況而定,而且你一定要細心比較下我第一步查詢出來的字符集和這邊「=」後的值之間的區別,在「."之前的部分要用引號引起來

)第三步:這裡也是我當初搞了許久的地方,因為這個環境變數修改之後,一般情況下系統不重啟,是不會生效的。可是我們這個伺服器是24*7的,因此是不允許重啟的。這個時候source的命令就立功了。這個命令可以讓環境變數立即生效,不需要重啟伺服器或者登出。我們退出sqlplus,然後敲以下命令:source /home/oracle/.bash_profile,打回車。

第四步:ok了,自己測試下,最好是insert、update命令都試下。

補充:source命令的原理其實應該是這樣的,由於環境變數是我們隨時會用到的(至於為什麼,菜鳥們自己查),因此常駐記憶體是比較高效的辦法,因此linux作業系統在啟動時,會講這些變數一次性全讀取到記憶體中去。如果,我們不重啟伺服器,是不會再去讀取的。如果我們使用了source命令,則系統馬上回重新讀取一次最新的,其實應就是從.bash_profile檔案中去讀取。然後覆蓋了記憶體中的內容)。

解決Linux下sqlplus中文亂碼問題

錯誤現象 在windows下用其他工具訪問oracle,確認中文正常顯示。在linux下使用sqlplus查詢資料表中文內容出現亂碼。分析及解決 因為windows下正常,所以問題應出現在linux客戶端。用下列sql查詢資料庫字符集為 zhs16gbk select from nls databa...

Linux上sqlplus匯入指令碼亂碼問題解決

1.先切換到oracle角色 su oracle2.檢視oracle資料庫的字符集,需要登入到oracle 查詢sql select userenv language from dual 登入命令 sqlplus as sysdba sqlplus 使用者名稱 密碼 表空間3.檢視linux 的字符...

sqlplus中文顯示亂碼的問題

在windows下sqlplus完全正常,可是到linux下,sqlplus中文顯示就出問題了,總是顯示 或是其他亂碼,這個問題又怎麼解決呢?經過在網路上查資料,以及嘗試,得到的解法如下 其實很簡單我們只要設定退出sqlplus,設定相應的環境變數nls lang export nls lang s...