數據庫字符集在創建后原則上不能更改。如果需要修改字符集,通常需要導出數據庫數據,重建數據庫,再導入數據庫數據的方式來轉換,或通過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

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » 修改oracle字符集

登錄

找回密碼

注冊

主站蜘蛛池模板: 国产精品久久蜜臀av| 看亚洲黄色不在线网占| 精品亚洲AⅤ无码午夜在线| 国产日韩一区二区在线| 乱人伦人妻系列| 不卡视频在线一区二区三区| 樱桃熟了a级毛片| 老鸭窝在线视频| 亚洲最大成人在线播放| 久久婷婷成人综合色| 自拍偷在线精品自拍偷99| 亚洲午夜性猛春交XXXX| 奇米四色7777中文字幕| 精品精品国产国产自在线| 91精品国产午夜福利| 中国老熟妇自拍hd发布| 免费无码av片在线观看网站| 日本高清无卡码一区二区| 亚洲成人av在线资源| 开心五月激情综合久久爱| 久久久天堂国产精品女人| 年轻女教师hd中字3| 国产午精品午夜福利757视频播放| 狠狠色婷婷久久综合频道日韩| 亚洲国产av久久久| 亚洲综合无码明星蕉在线视频| 国产色a在线观看| 日韩精品福利一二三专区| 国产亚洲tv在线观看| 蜜桃av无码免费看永久| 91午夜福利在线观看精品| 永福县| 国产成人精品18| 不卡乱辈伦在线看中文字幕| 宜川县| 午夜福利宅福利国产精品| 人妻少妇久久中文字幕| 亚洲精品中文字幕一区二| 亚洲免费人成在线视频观看| 中文字幕免费不卡二区| 午夜国产理论大片高清|