1、查看數據庫編碼、客戶端編碼
--數據庫編碼,查詢的數據來源props$,這個代表的是數據庫字符集。
select * from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
--其來源於v$parameter,表示客戶端的字符集的設置,可能是參數文件,環境變量或者是注冊表會話字符集環境
select * from nls_instance_parameters where parameter='NLS_LANGUAGE';
--session參數
select * from nls_session_parameters;
2、查看表數據的字節存儲信息
select
--數據的二進制編碼表示
asciistr(col1) A,
--字節數據,10進制表示
dump(col1) C10,
--字節數據,16進制表示
dump(col1,1016) C16,
--數據的uncode編碼表示
compose(col1) uncode,
--數據的16進制表示
utl_raw.cast_to_raw(col1) cn,
--數據的16進制的字符串格式
utl_raw.cast_to_varchar2(utl_raw.cast_to_raw(col1)) cn2,
col1
from
schema1.table1
;
3、設置客戶端(sqlplus)編碼
docker登陸:
docker exec -it e48c9419b4d4 /bin/bash
登陸oracle安裝用戶:
su - oracle
設置服務器編碼:
vi ~/.bash_profile
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
# export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
source ~/.bash_profile
echo $NLS_LANG
# 顯示AMERICAN_AMERICA.ZHS16GBK表示編碼修改成功
sqlplus / as sysdba
# 向表中插入中文數據測試