修改oracle字符集
一 修改資料庫SERVER端字符集
資料庫字符集在建立後原則上不能更改。如果需要修改字符集,通常需要匯出資料庫資料,重建資料庫,再匯入資料庫資料的方式來轉換,或透過ALTER DATABASE CHARACTER SET語句修改字符集,但建立資料庫後修改字符集是有限制的,只有新的字符集是當前字符集的超集時才能修改資料庫字符集,例如UTF8是US7ASCII的超集,修改資料庫字符集可使用ALTER DATABASE CHARACTER SET UTF8。根據Oracle的官方說明,字符集的轉換是從子集到超集受支援,反之不行。如果兩種字符集之間根本沒有子集和超集的關係,那麼字符集的轉換是不受oracle支援的。
對資料庫server而言,錯誤的修改字符集將會導致很多不可測的後果,可能會嚴重影響資料庫的正常執行,所以在修改之前一定要確認兩種字符集是否存在子集和超集的關係。一般來說,除非萬不得已,我們不建議修改oracle資料庫server端的字符集。
特別說明,我們最常用的兩種字符集ZHS16GBK和ZHS16CGB231280之間不存在子集和超集關係,因此理論上講這兩種字符集之間的相互轉換不受支援。
1 修改server端字符集方法
在oracle 8之前,可以用直接修改資料字典表props$來改變資料庫的字符集。但oracle8之後,至少有三張系統表記錄了資料庫字符集的資訊,只改props$表並不完全,可能引起嚴重的後果。正確的修改方法如下:
$sqlplus /nolog
SQL>conn / as sysdba;
若此時資料庫伺服器已啟動,則先執行SHUTDOWN IMMEDIATE命令關閉資料庫伺服器,然後執行以下命令:
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
2 修改server端字符集方法(可以跳過超集的檢查)
使用INTERNAL_USE可以跳過超集的檢查,ALTER DATABASE character set INTERNAL_USE 加這個以後,就可以徹底解決修改的問題,即使報錯也能修改.如:
ALTER DATABASE character set INTERNAL_USE ZHS16CGB231280;
ALTER DATABASE character set INTERNAL_USE zhs16gbk;
SQL> connect sys/oracle as sysdba
SQL> startup mount
SQL> alter session set sql_trace=true;
SQL> alter system enable restricted session;
SQL> alter system set job_queue_processes=0;
SQL> alter system set aq_tm_processes=0;
SQL> alter database open;
SQL> set linesize 120;
SQL> alter database character set ZHS16GBK;
報錯:
alter database character set zhs16gbk
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
# 使用INTERNAL_USE可以跳過超集的檢查,ALTER DATABASE character set INTERNAL_USE
SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk;
SQL> shutdown immediate;
SQL> STARTUP
SQL> select name,value$ from props$ where name like '%NLS%';
NLS_CHARACTERSET
zhs16gbk
二 客戶端字符集(NLS_LANG引數)
1 客戶端字符集含義
客戶端字符集定義了客戶端字元資料的編碼方式,任何發自或發往客戶端的字元資料均使用客戶端定義的字符集編碼,客戶端可以看作是能與資料庫直接連線的各種應用,例如sqlplus,exp/imp等。客戶端字符集是透過設定NLS_LANG引數來設定的。
2 查詢oracle client端的字符集
這個比較簡單。在windows平臺下,就是登錄檔裡面相應OracleHome的NLS_LANG。
還可以在dos視窗裡面自己設定,比如:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
這樣就隻影響這個視窗裡面的環境變數。
在unix平臺下,就是環境變數NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
如果檢查的結果發現server端與client端字符集不一致,請統一修改為同server端相同的字符集。
3 客戶端字符集設定方法
1)UNIX環境
$NLS_LANG=“simplified chinese”_china.zhs16gbk
$export NLS_LANG
編輯oracle使用者的profile檔案
或者是臨時改變export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
2)Windows環境
編輯登錄檔
Regedit.exe---HKEY_LOCAL_MACHINE---SOFTWARE---ORACLE—HOME0
資料庫字符集在建立後原則上不能更改。如果需要修改字符集,通常需要匯出資料庫資料,重建資料庫,再匯入資料庫資料的方式來轉換,或透過ALTER DATABASE CHARACTER SET語句修改字符集,但建立資料庫後修改字符集是有限制的,只有新的字符集是當前字符集的超集時才能修改資料庫字符集,例如UTF8是US7ASCII的超集,修改資料庫字符集可使用ALTER DATABASE CHARACTER SET UTF8。根據Oracle的官方說明,字符集的轉換是從子集到超集受支援,反之不行。如果兩種字符集之間根本沒有子集和超集的關係,那麼字符集的轉換是不受oracle支援的。
對資料庫server而言,錯誤的修改字符集將會導致很多不可測的後果,可能會嚴重影響資料庫的正常執行,所以在修改之前一定要確認兩種字符集是否存在子集和超集的關係。一般來說,除非萬不得已,我們不建議修改oracle資料庫server端的字符集。
特別說明,我們最常用的兩種字符集ZHS16GBK和ZHS16CGB231280之間不存在子集和超集關係,因此理論上講這兩種字符集之間的相互轉換不受支援。
1 修改server端字符集方法
在oracle 8之前,可以用直接修改資料字典表props$來改變資料庫的字符集。但oracle8之後,至少有三張系統表記錄了資料庫字符集的資訊,只改props$表並不完全,可能引起嚴重的後果。正確的修改方法如下:
$sqlplus /nolog
SQL>conn / as sysdba;
若此時資料庫伺服器已啟動,則先執行SHUTDOWN IMMEDIATE命令關閉資料庫伺服器,然後執行以下命令:
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
2 修改server端字符集方法(可以跳過超集的檢查)
使用INTERNAL_USE可以跳過超集的檢查,ALTER DATABASE character set INTERNAL_USE 加這個以後,就可以徹底解決修改的問題,即使報錯也能修改.如:
ALTER DATABASE character set INTERNAL_USE ZHS16CGB231280;
ALTER DATABASE character set INTERNAL_USE zhs16gbk;
SQL> connect sys/oracle as sysdba
SQL> startup mount
SQL> alter session set sql_trace=true;
SQL> alter system enable restricted session;
SQL> alter system set job_queue_processes=0;
SQL> alter system set aq_tm_processes=0;
SQL> alter database open;
SQL> set linesize 120;
SQL> alter database character set ZHS16GBK;
報錯:
alter database character set zhs16gbk
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
# 使用INTERNAL_USE可以跳過超集的檢查,ALTER DATABASE character set INTERNAL_USE
SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk;
SQL> shutdown immediate;
SQL> STARTUP
SQL> select name,value$ from props$ where name like '%NLS%';
NLS_CHARACTERSET
zhs16gbk
二 客戶端字符集(NLS_LANG引數)
1 客戶端字符集含義
客戶端字符集定義了客戶端字元資料的編碼方式,任何發自或發往客戶端的字元資料均使用客戶端定義的字符集編碼,客戶端可以看作是能與資料庫直接連線的各種應用,例如sqlplus,exp/imp等。客戶端字符集是透過設定NLS_LANG引數來設定的。
2 查詢oracle client端的字符集
這個比較簡單。在windows平臺下,就是登錄檔裡面相應OracleHome的NLS_LANG。
還可以在dos視窗裡面自己設定,比如:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
這樣就隻影響這個視窗裡面的環境變數。
在unix平臺下,就是環境變數NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
如果檢查的結果發現server端與client端字符集不一致,請統一修改為同server端相同的字符集。
3 客戶端字符集設定方法
1)UNIX環境
$NLS_LANG=“simplified chinese”_china.zhs16gbk
$export NLS_LANG
編輯oracle使用者的profile檔案
或者是臨時改變export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
2)Windows環境
編輯登錄檔
Regedit.exe---HKEY_LOCAL_MACHINE---SOFTWARE---ORACLE—HOME0
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2148951/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 字符集修改Oracle
- 修改Oracle資料庫字符集(zt)Oracle資料庫
- 修改Oracle字符集為ZHS16GBKOracle
- 「Oracle」資料庫字符集編碼修改Oracle資料庫
- 修改sqlserver字符集SQLServer
- Oracle 12C 修改字符集為AL32UTF8研究Oracle
- Oracle修改字符集前如何找出可能出現問題的資料?Oracle
- CentOS7.5修改字符集CentOS
- 教你玩轉Eclipse—修改字符集Eclipse
- 批次修改欄位字符集和表表字符集,sql生成SQL
- powershell無法修改字符集,非修改登錄檔修改powershell的方法
- MySQL修改表預設字符集行為MySql
- MySQL檢視和修改字符集的方法MySql
- JAVA java學習(22)——————Eclipse 修改字符集JavaEclipse
- MySQL 檢視與修改預設字符集MySql
- 更改Oracle字符集:把字符集ZHS16GBK換成UTF8Oracle
- 為Zabbix MySQL修改字符集排序utf8_binMySql排序
- mysql亂碼?一勞永逸修改mysql字符集!MySql
- Oracle Linux 7設定中文字符集OracleLinux
- Oracle修改時區Oracle
- oracle nid修改dbnameOracle
- 如何在10g中修改資料庫字符集資料庫
- Oracle 字符集從GBK升級到Utf8Oracle
- Oracle 12.2 新特性 | PDB不同字符集變更深入解析Oracle
- oracle ora-00333 修改案例Oracle
- Oracle 增加 修改 刪除 列Oracle
- 遷移ORACLE資料到MogDB/openGauss時的字符集問題Oracle
- Oracle RAC修改public, VIP, SCAN IPOracle
- ordebug 手動修改Oracle sga scnOracle
- 修改oracle 的統計資訊Oracle
- 字符集
- oracle 修改表欄位的長度Oracle
- Oracle RAC修改引數檔案位置Oracle
- 【RAC】Oracle RAC如何修改心跳網路Oracle
- Oracle 11G 修改scan_ipOracle
- 使用NID修改Oracle資料庫名Oracle資料庫
- PYTHON3 cx-Oracle 字符集 轉換錯誤的解決方案PythonOracle
- 關於Oracle 9i字符集問題的解決辦法FCOracle
- Tomcat字符集Tomcat