Oracle 字符集詳解與配置方法

Oracle的三個字符集

數據庫字符集:該字符集是數據庫的字符集,在創建數據庫的時候是可以指定的。數據庫創建之後,如果修改字符集,數據會亂碼。如有更改需要,就得采用一些特殊方法了,下文會提出其中一種思路。
默認設置:由於數據庫越來越國際化,ORACLE19C中已經默認爲AL32UTF8,語言AMERICAN,區域AMERICA。所以,建議所有的數據庫,全部使用默認的設置。
查詢方法

select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

客戶端字符集:該字符集目前未發現任何作用,有了解的朋友建議留言。該字符集由spfile文件配置,與系統環境等等無關。
查詢方法

select * from nls_instance_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

會話字符集:該字符集默認繼承客戶端字符集。可以被環境變量設置覆蓋。該字符集影響了客戶端的提示信息,日期,查詢結果等的顯示。只要該字符集與數據庫字符集相同,就不會亂碼。
注意:該字符集隻影響於安裝ORACLE的服務器上的客戶端。遠程連接的客戶端並不會生效。
查詢方法

 select * from nls_session_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

Oracle19C字符集設置方法

數據庫字符集設置方法
注意:以下方法,均爲創建數據庫時的設置,創建數據庫之後需要修改,建議導出數據,重建數據庫,再次導入數據。
本次實驗中,Oracle安裝方法爲以下鏈接:
Oracle 19c之RPM安裝
方法一:
查看該鏈接後,會發現數據庫在安裝完成之後,需要初始化。
該初始化內容實際上爲創建容器數據庫和可拔插數據庫
查看腳本

cat /etc/init.d/oracledb_ORCLCDB-19c

可以看到創建數據庫的相關參數,其中CHARSET爲數據庫字符集,此處可以修改爲您想設置的字符集。接下來初始化既可。

export ORACLE_VERSION=19c
export ORACLE_SID=ORCLCDB
export TEMPLATE_NAME=General_Purpose.dbc
export CHARSET=AL32UTF8
export PDB_NAME=ORCLPDB1
export LISTENER_NAME=LISTENER
export NUMBER_OF_PDBS=1
export CREATE_AS_CDB=true

例如修改爲ZHS16GBK字符集

export CHARSET=ZHS16GBK

方法二:
在安裝完數據庫後,請勿初始化。
打開以下腳本,耐心等待後,會啓動圖形化界面。

/opt/oracle/product/19c/dbhome_1/bin/dbca.sh

該工具可以創建修改刪除容器數據庫,可拔插數據。
此處不詳細介紹,因爲圖形化已經很簡單了。

客戶端字符集設置方法
進入SQLPLUS,執行以下命令。

alter system set nls_language='SIMPLIFIED CHINESE' scope=spfile;#此處修改語言爲簡體中文
alter system set nls_territory=CHINA scope=spfile;#此處修改區域爲中國
startup force;#強制重啓數據庫

會話字符集設置方法
會話字符集默認繼承客戶端字符集。在安裝ORACLE的服務器上,直接繼承並且生效。在遠程客戶端上,雖默認繼承,但是並不生效,即使與數據庫字符集相同,依然可能會亂碼,強烈建議設置環境變量覆蓋。

環境變量參數解析

Language: 顯示oracle消息,校驗,日期命名
Territory:指定默認日期、數字、貨幣等格式
Client character set:指定客戶端將使用的字符集

NLS_LANG=language_territory.client character set

示例:

NLS_LANG=AMERICAN_AMERICA.US7ASCII 

AMERICAN是語言,AMERICA是地區,US7ASCII是客戶端字符集

WINDOWS
添加環境變量:
變量名:NLS_LANG
變量值:AMERICAN_AMERICA.AL32UTF8

Linux
添加環境變量:
配置文件目錄:

/etc/profile

添加該段到Oracle用戶的配置文件中

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8  

保存後,編譯配置。

source /etc/profile

綜上所述,最理想的狀態是三個字符集統一,但是不能統一,最少也數據庫字符集與會話字符集統一,才能保證正常使用,不亂碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章