當前位置:首頁 » 操作系統 » 資料庫af

資料庫af

發布時間: 2022-10-24 05:51:44

linux怎麼備份資料庫

一、 使用mysql相關命令進行簡單的本地備份

1 mysqllmp命令

mysqlmp 是採用SQL級別的備份機制,它將數據表導成 SQL 腳本文件,在不同的 MySQL 版本之間升級時相對比較合適,這也是最常用的備份方法。

使用 mysqlmp進行備份非常簡單,如果要備份資料庫」 db_backup 」,使用命令:
#mysqlmp –u -p phpbb_db_backup > /usr/backups/mysql/db_backup2008-1-6.sql
還可以使用gzip命令對備份文件進行壓縮
#mysqlmp db_backup | gzip > /usr/backups/mysql/ db_backup2008-1-6.sql.gz (備份後生成的sql不含建庫語句!)
只備份一些頻繁更新的資料庫表:
## mysqlmp sample_db articles comments links > /usr/backups/mysql/sample_db.art_comm_lin.2008-1-6.sql
上面的命令會備份articles, comments, 和links 三個表。

恢復數據使用命令:
#mysql –u -p db_backup </usr/backups/mysql/ db_backup2008-1-6.sql
注意使用這個命令時必須保證資料庫正在運行。

2 使用 SOURCE 語法

其實這不是標準的 SQL 語法,而是 mysql 客戶端提供的功能,例如:
# SOURCE /tmp/db_name.sql;
這里需要指定文件的絕對路徑,並且必須是 mysqld 運行用戶(例如 nobody)有許可權讀取的文件。

3 mysqlhot備份

mysqlhot 只能用於備份 MyISAM,並且只能運行在 linux 和Unix 和 NetWare 系統上。mysqlhot 支持一次性拷貝多個資料庫,同時還支持正則表達。以下是幾個例子:
#mysqlhot -h=localhost -u=goodcjh -p=goodcjh db_name /tmp
(把資料庫目錄 db_name 拷貝到 /tmp 下)
注意,想要使用 mysqlhot,必須要有 SELECT、RELOAD(要執行 FLUSH TABLES) 許可權,並且還必須要能夠有讀取 datadir/db_name 目錄的許可權。

還原資料庫方法:

mysqlhot 備份出來的是整個資料庫目錄,使用時可以直接拷貝到 mysqld 指定的 目錄 (在這里是 /usr/local/mysql/data/)目錄下即可,同時要注意許可權的問題,另外首先應當刪除資料庫舊副本如下例:

# /bin/rm -rf /mysql-backup/**//*old
關閉mysql 伺服器、復制文件、查詢啟動mysql伺服器的三個步驟:
# /etc/init.d/mysqld stop
Stopping MySQL: [ OK ]
# cp -af /mysql-backup/**//* /var/lib/mysql /
# /etc/init.d/mysqld start
Starting MySQL: [ OK ]
#chown -R nobody:nobody /usr/local/mysql/data/ (將 db_name 目錄的屬主改成 mysqld 運行用戶)
二、使用網路備份

將MYSQL數據放在一台計算機上是不安全的,所以應當把數據備份到區域網中其他Linux計算機中。假設Mysql伺服器IP地址是:192.168.1.3。區域網使用Linux的遠程計算機IP地址是192.168.1.4;類似於windows的網路共享,UNIX(Linux)系統也有自己的網路共享,那就是NFS(網路文件系統),在linux客戶端掛接(mount)NFS磁碟共享之前,必須先配置好NFS服務端。linux系統NFS服務端配置方法如下:

(1)修改 /etc/exports,增加共享目錄
/export/home/sunky 192.168.1.4(rw)
/export/home/sunky1 *(rw)
/export/home/sunky2 linux-client(rw)

② 智慧城市數據儲存常用的資料庫有哪些

咨詢記錄 · 回答於2021-12-13

③ 怎麼解決向資料庫輸入的問題

你呀,我發現你犯了個嚴重且還不容易察覺的錯誤!你是不是在運行時拋出NullPointerException空指針異常了呢?就是嘛,因為你在public void jbutton1()方法內有這幾句代碼:

JTextField bianhao1=new JTextField(10);
JTextField shuming1=new JTextField(10);
JTextField zuozhe1=new JTextField(10);
JTextField danwei1=new JTextField(10);
JTextField shijian1=new JTextField(10);

這幾句代碼的意思是分別創建了新的(注意是新創建的)JTextField局部變數,引用名分別為bianhao1,shuming1,zuozhe1,danwei1和shijian1。這樣一來的話就與你在最前面聲明的

JTextField bianhao1,shuming1,zuozhe1,danwei1,shijian1;

這句產生沖突了,既局部變數屏蔽了全局變數,以致你開頭聲明的全局變數bianhao1,shuming1,zuozhe1,danwei1和shijian1依舊指向空指針null!
像這么說你明白了沒有(你初學的話看看書應該就明白的...)?

所以你應該將public void jbutton1()方法中引用名bianhao1,shuming1,zuozhe1,danwei1和shijian1前面的JTextField去掉,即改為:

bianhao1=new JTextField(10);
shuming1=new JTextField(10);
zuozhe1=new JTextField(10);
danwei1=new JTextField(10);
shijian1=new JTextField(10);

懂了嗎?這樣一來的話你在下面接收輸入值時就對了!
總之希望能幫上你,還有不明白的地方歡迎提問!

④ 資料庫還原失敗

先去資料庫建一個
與你要還原的資料庫名字一樣的資料庫

然後還原的時候,左上角有個選項設置,把裡面的覆蓋原有資料庫這一選項勾上,然後在還原

⑤ 資料庫 關系模式 BC → D, C → AF, AB → CE 如何分解成BCNF

我們先來推斷一下碼;
c->af====>c->a,c->f
ab->ce===>ab->c,ab->e
這樣我們得到:ab->a,ab->c,ab->f,ab->e
又因為
bc->d,ab->c
我們是不是能得到ab->d呢,答案是肯定的。所以呢ab作為碼就可以了。
根據BCNF定義,可分為:
R1 {A,B,C,E}
R1 {A,B,D,F},如果不對,歡迎指正。

⑥ oracle sql 語句里 af_pub_getseq() 是什麼意思,怎麼用的

af_pub_getseq 看著應該是自定義的一個函數,獲取序列。

你可以去資料庫的函數中去看看,應該是你們自定義的函數

⑦ 常用的資料庫有哪幾種試著闡述每種資料庫的特點和使用范圍

關系資料庫、非關系型資料庫。

1、關系資料庫

特點:數據集中控制;減少數據冗餘等。

適用范圍:對於結構化數據的處理更合適,如學生成績、地址等,這樣的數據一般情況下需要使用結構化的查詢。

2、非關系資料庫

特點:易擴展;大數據量,高性能;靈活的數據模型等。

使用范圍:據模型比較簡單;需要靈活性更強的IT系統;對資料庫性能要求較高。

(7)資料庫af擴展閱讀:

非關系資料庫的分類:

1、列存儲資料庫

這部分資料庫通常是用來應對分布式存儲的海量數據。鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak。

2、文檔型資料庫

文檔型資料庫的靈感是來自於Lotus Notes辦公軟體的,而且它同第一種鍵值存儲相類似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,比如JSON。文檔型資料庫可 以看作是鍵值資料庫的升級版,允許之間嵌套鍵值。而且文檔型資料庫比鍵值資料庫的查詢效率更高。如:CouchDB, MongoDb. 國內也有文檔型資料庫SequoiaDB,已經開源。

⑧ 如何查看和修改Oracle資料庫伺服器端的字元集

Oracle 字元集的查看和修改
一、什麼是Oracle字元集
Oracle字元集是一個位元組數據的解釋的符號集合,有大小之分,有相互的包容關系。ORACLE 支持國家語言的體系結構允許你使用本地化語言來存儲,處理,檢索數據。它使資料庫工具,錯誤消息,排序次序,日期,時間,貨幣,數字,和日歷自動適應本地化語言和平台。

影響Oracle資料庫字元集最重要的參數是NLS_LANG參數。
它的格式如下: NLS_LANG = language_territory.charset
它有三個組成部分(語言、地域和字元集),每個成分控制了NLS子集的特性。
其中:
Language: 指定伺服器消息的語言, 影響提示信息是中文還是英文
Territory: 指定伺服器的日期和數字格式,
Charset: 指定字元集。
如:AMERICAN _ AMERICA. ZHS16GBK
從NLS_LANG的組成我們可以看出,真正影響資料庫字元集的其實是第三部分。
所以兩個資料庫之間的字元集只要第三部分一樣就可以相互導入導出數據,前面影響的只是提示信息是中文還是英文。

二.字元集的相關知識:
2.1 字元集
實質就是按照一定的字元編碼方案,對一組特定的符號,分別賦予不同數值編碼的集合。Oracle資料庫最早支持的編碼方案是US7ASCII。
Oracle的字元集命名遵循以下命名規則:
<Language><bit size><encoding>
即: <語言><比特位數><編碼>
比如: ZHS16GBK表示採用GBK編碼格式、16位(兩個位元組)簡體中文字元集

2.2 字元編碼方案

2.2.1 單位元組編碼
(1)單位元組7位字元集,可以定義128個字元,最常用的字元集為US7ASCII
(2)單位元組8位字元集,可以定義256個字元,適合於歐洲大部分國家
例如:WE8ISO8859P1(西歐、8位、ISO標准8859P1編碼)

2.2.2 多位元組編碼
(1)變長多位元組編碼
某些字元用一個位元組表示,其它字元用兩個或多個字元表示,變長多位元組編碼常用於對亞洲語言的支持, 例如日語、漢語、印地語等
例如:AL32UTF8(其中AL代表ALL,指適用於所有語言)、zhs16cgb231280
(2)定長多位元組編碼
每一個字元都使用固定長度位元組的編碼方案,目前oracle唯一支持的定長多位元組編碼是AF16UTF16,也是僅用於國家字元集
2.2.3 unicode編碼
Unicode是一個涵蓋了目前全世界使用的所有已知字元的單一編碼方案,也就是說Unicode為每一個字元提供唯一的編碼。UTF-16是unicode的16位編碼方式,是一種定長多位元組編碼,用2個位元組表示一個unicode字元,AF16UTF16是UTF-16編碼字元集。
UTF-8是unicode的8位編碼方式,是一種變長多位元組編碼,這種編碼可以用1、2、3個位元組表示一個unicode字元,AL32UTF8,UTF8、UTFE是UTF-8編碼字元集

2.3 字元集超級
當一種字元集(字元集A)的編碼數值包含所有另一種字元集(字元集B)的編碼數值,並且兩種字元集相同編碼數值代表相同的字元時,則字元集A是字元集B的超級,或稱字元集B是字元集A的子集。
Oracle8i和oracle9i官方文檔資料中備有子集-超級對照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由於US7ASCII是最早的Oracle資料庫編碼格式,因此有許多字元集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。

2.4 資料庫字元集(oracle伺服器端字元集)
資料庫字元集在創建資料庫時指定,在創建後通常不能更改。在創建資料庫時,可以指定字元集(CHARACTER SET)和國家字元集(NATIONAL CHARACTER SET)。

2.4.1字元集
(1)用來存儲CHAR, VARCHAR2, CLOB, LONG等類型數據
(2)用來標示諸如表名、列名以及PL/SQL變數等
(3)用來存儲SQL和PL/SQL程序單元等

2.4.2國家字元集:
(1)用以存儲NCHAR, NVARCHAR2, NCLOB等類型數據
(2)國家字元集實質上是為oracle選擇的附加字元集,主要作用是為了增強oracle的字元處理能力,因為NCHAR數據類型可以提供對亞洲使用定長多位元組編碼的支持,而資料庫字元集則不能。國家字元集在oracle9i中進行了重新定義,只能在unicode編碼中的AF16UTF16和UTF8中選擇,默認值是AF16UTF16

2.4.3查詢字元集參數
可以查詢以下數據字典或視圖查看字元集設置情況
nls_database_parameters、props$、v$nls_parameters
查詢結果中NLS_CHARACTERSET表示字元集,NLS_NCHAR_CHARACTERSET表示國家字元集

2.4.4修改資料庫字元集
按照上文所說,資料庫字元集在創建後原則上不能更改。不過有2種方法可行。

1. 如果需要修改字元集,通常需要導出資料庫數據,重建資料庫,再導入資料庫數據的方式來轉換。
2. 通過ALTER DATABASE CHARACTER SET語句修改字元集,但創建資料庫後修改字元集是有限制的,只有新的字元集是當前字元集的超集時才能修改資料庫字元集,例如UTF8是US7ASCII的超集,修改資料庫字元集可使用ALTER DATABASE CHARACTER SET UTF8。

2.5 客戶端字元集(NLS_LANG參數)

2.5.1客戶端字元集含義
客戶端字元集定義了客戶端字元數據的編碼方式,任何發自或發往客戶端的字元數據均使用客戶端定義的字元集編碼,客戶端可以看作是能與資料庫直接連接的各種應用,例如sqlplus,exp/imp等。客戶端字元集是通過設置NLS_LANG參數來設定的。

2.5.2 NLS_LANG參數格式
NLS_LANG=<language>_<territory>.<client character set>
Language: 顯示oracle消息,校驗,日期命名
Territory:指定默認日期、數字、貨幣等格式
Client character set:指定客戶端將使用的字元集
例如:NLS_LANG=AMERICAN_AMERICA.US7ASCII
AMERICAN是語言,AMERICA是地區,US7ASCII是客戶端字元集

2.5.3客戶端字元集設置方法
1)UNIX環境
$NLS_LANG=「simplified chinese」_china.zhs16gbk
$export NLS_LANG
編輯oracle用戶的profile文件
2)Windows環境
編輯注冊表
Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE-HOME

2.5.4 NLS參數查詢
Oracle提供若干NLS參數定製資料庫和用戶機以適應本地格式,例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER等,可以通過查詢以下數據字典或v$視圖查看。
NLS_DATABASE_PARAMETERS:顯示資料庫當前NLS參數取值,包括資料庫字元集取值
NLS_SESSION_PARAMETERS: 顯示由NLS_LANG 設置的參數,或經過alter session 改變後的參數值(不包括由NLS_LANG 設置的客戶端字元集)
NLS_INSTANCE_PARAMETE: 顯示由參數文件init<SID>.ora 定義的參數
V$NLS_PARAMETERS:顯示資料庫當前NLS參數取值

2.5.5修改NLS參數
使用下列方法可以修改NLS參數
(1)修改實例啟動時使用的初始化參數文件
(2)修改環境變數NLS_LANG
(3)使用ALTER SESSION語句,在oracle會話中修改
(4)使用某些SQL函數
NLS作用優先順序別:Sql function > alter session > 環境變數或注冊表 > 參數文件 > 資料庫默認參數

三.EXP/IMP 與 字元集
3.1 EXP/IMP
Export 和 Import 是一對讀寫Oracle數據的工具。Export 將 Oracle 資料庫中的數據輸出到操作系統文件中, Import 把這些文件中的數據讀到Oracle 資料庫中,由於使用exp/imp進行數據遷移時,數據從源資料庫到目標資料庫的過程中有四個環節涉及到字元集,如果這四個環節的字元集不一致,將會發生字元集轉換。
EXP
____________ _________________ _____________
|imp導入文件|<-|環境變數NLS_LANG|<-|資料庫字元集|
------------ ----------------- -------------
IMP
____________ _________________ _____________
|imp導入文件|->|環境變數NLS_LANG|->|資料庫字元集|
------------ ----------------- -------------

四個字元集是
(1)源資料庫字元集
(2)Export過程中用戶會話字元集(通過NLS_LANG設定)
(3)Import過程中用戶會話字元集(通過NLS_LANG設定)
(4)目標資料庫字元集

3.2導出的轉換過程
在Export過程中,如果源資料庫字元集與Export用戶會話字元集不一致,會發生字元集轉換,並在導出文件的頭部幾個位元組中存儲Export用戶會話字元集的ID號。在這個轉換過程中可能發生數據的丟失。

例:如果源資料庫使用ZHS16GBK,而Export用戶會話字元集使用US7ASCII,由於ZHS16GBK是16位字元集,而US7ASCII是7位字元集,這個轉換過程中,中文字元在US7ASCII中不能夠找到對等的字元,所以所有中文字元都會丟失而變成「?? 」形式,這樣轉換後生成的Dmp文件已經發生了數據丟失。
因此如果想正確導出源資料庫數據,則Export過程中用戶會話字元集應等於源資料庫字元集或是源資料庫字元集的超集

3.3導入的轉換過程
(1)確定導出資料庫字元集環境
通過讀取導出文件頭,可以獲得導出文件的字元集設置
(2)確定導入session的字元集,即導入Session使用的NLS_LANG環境變數
(3)IMP讀取導出文件
讀取導出文件字元集ID,和導入進程的NLS_LANG進行比較
(4)如果導出文件字元集和導入Session字元集相同,那麼在這一步驟內就不需要轉換, 如果不同,就需要把數據轉換為導入Session使用的字元集。可以看出,導入數據到資料庫過程中發生兩次字元集轉換

第一次:導入文件字元集與導入Session使用的字元集之間的轉換,如果這個轉換過程不能正確完成,Import向目標資料庫的導入過程也就不能完成。
第二次:導入Session字元集與資料庫字元集之間的轉換。

四. 查看資料庫字元集
涉及三方面的字元集,
1. oracel server端的字元集;
2. oracle client端的字元集;
3. dmp文件的字元集。

在做數據導入的時候,需要這三個字元集都一致才能正確導入。

4.1 查詢oracle server端的字元集
有很多種方法可以查出oracle server端的字元集,比較直觀的查詢方法是以下這種:
SQL> select userenv('language') from al;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL>select userenv(『language』) from al;
AMERICAN _ AMERICA. ZHS16GBK

4.2 如何查詢dmp文件的字元集
用oracle的exp工具導出的dmp文件也包含了字元集信息,dmp文件的第2和第3個位元組記錄了dmp文件的字元集。如果dmp文件不大,比如只有幾M或幾十M,可以用UltraEdit打開(16進制方式),看第2第3個位元組的內容,如0354,然後用以下SQL查出它對應的字元集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from al;
ZHS16GBK

如果dmp文件很大,比如有2G以上(這也是最常見的情況),用文本編輯器打開很慢或者完全打不開,可以用以下命令(在unix主機上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然後用上述SQL也可以得到它對應的字元集。

4.3 查詢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端相同的字元集。

補充:
(1).資料庫伺服器字元集
select * from nls_database_parameters
來源於props$,是表示資料庫的字元集。

(2).客戶端字元集環境
select * from nls_instance_parameters
其來源於v$parameter,表示客戶端的字元集的設置,可能是參數文件,環境變數或者是注冊表

(3).會話字元集環境
select * from nls_session_parameters
來源於v$nls_parameters,表示會話自己的設置,可能是會話的環境變數或者是alter session完成,如果會話沒有特殊的設置,將與nls_instance_parameters一致。

(4).客戶端的字元集要求與伺服器一致,才能正確顯示資料庫的非Ascii字元。
如果多個設置存在的時候,NLS作用優先順序別:Sql function > alter session > 環境變數或注冊表 > 參數文件 > 資料庫默認參數

字元集要求一致,但是語言設置卻可以不同,語言設置建議用英文。如字元集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk。

五. 修改oracle的字元集
按照上文所說,資料庫字元集在創建後原則上不能更改。因此,在設計和安裝之初考慮使用哪一種字元集十分重要。對資料庫server而言,錯誤的修改字元集將會導致很多不可測的後果,可能會嚴重影響資料庫的正常運行,所以在修改之前一定要確認兩種字元集是否存在子集和超集的關系。一般來說,除非萬不得已,我們不建議修改oracle資料庫server端的字元集。特別說明,我們最常用的兩種字元集ZHS16GBK和ZHS16CGB231280之間不存在子集和超集關系,因此理論上講這兩種字元集之間的相互轉換不受支持。

不過修改字元集有2種方法可行。
1. 通常需要導出資料庫數據,重建資料庫,再導入資料庫數據的方式來轉換。
2. 通過ALTER DATABASE CHARACTER SET語句修改字元集,但創建資料庫後修改字元集是有限制的,只有新的字元集是當前字元集的超集時才能修改資料庫字元集,例如UTF8是US7ASCII的超集,修改資料庫字元集可使用ALTER DATABASE CHARACTER SET UTF8。

5.1 修改server端字元集(不建議使用)

1. 關閉資料庫
SQL>SHUTDOWN IMMEDIATE

2. 啟動到Mount
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;

--如果是從子集到父集,需要使用INTERNAL_USE 參數,跳過超子集檢測
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL32UTF8;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP
注意:如果沒有大對象,在使用過程中進行語言轉換沒有什麼影響,(切記設定的字元集必須是ORACLE支持,不然不能start) 按上面的做法就可以。

若出現『ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists』 這樣的提示信息,
要解決這個問題有兩種方法
1. 利用INTERNAL_USE 關鍵字修改區域設置,
2. 利用re-create,但是re-create有點復雜,所以請用internal_use

SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT EXCLUSIVE;
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 NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SQL>SHUTDOWN immediate;
SQL>startup;
如果按上面的做法做,National charset的區域設置就沒有問題

5.2 修改dmp文件字元集
上文說過,dmp文件的第2第3位元組記錄了字元集信息,因此直接修改dmp文件的第2第3位元組的內容就可以『騙』過oracle的檢查。這樣做理論上也僅是從子集到超集可以修改,但很多情況下在沒有子集和超集關系的情況下也可以修改,我們常用的一些字元集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因為改的只是dmp文件,所以影響不大。

具體的修改方法比較多,最簡單的就是直接用UltraEdit修改dmp文件的第2和第3個位元組。
比如想將dmp文件的字元集改為ZHS16GBK,可以用以下SQL查出該種字元集對應的16進制代碼: SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from al;
0354
然後將dmp文件的2、3位元組修改為0354即可。
如果dmp文件很大,用ue無法打開,就需要用程序的方法了。

5.3客戶端字元集設置方法
1)UNIX環境
$NLS_LANG=「simplified chinese」_china.zhs16gbk
$export NLS_LANG
編輯oracle用戶的profile文件
2)Windows環境
編輯注冊表
Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE-HOME
或者在窗口設置:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK

⑨ 資料庫ORACLE裡面的英文縮寫

1.B.C.——British Columbia加拿大卑詩省的英文名,也稱「英屬哥倫比亞」省或「不列顛哥倫比亞」省

2.BCSIP——British Columbia Settlement and Integration Program卑詩省新移民安置及融入計劃

3.CPP——Canada Pension Plan加拿大退休金計劃

4.CIC——Citizenship and Immigration Canada加拿大公民及移民部

5.CPR——Canadian Pacific Railway加拿大太平洋鐵路

6.EI——Employment Insurance就業保險

7.ESL——English as a Second Language英語作為第二語言

8.GIC——Guaranteed Investment Certificate保證投資回報存款證

9.GST——Goods and Services Tax貨品服務稅

10.ICBC——Insurance Corporation of British Columbia卑詩省汽車保險公司

11.ID——Identification身份證明文件

12.IFH——Interim Federal Health聯邦政府臨時醫療紙

13.MSP——Medical Services Plan醫療保健計劃

14.OLA——Open Learning Agency公開成人教育中心

15.PST——Provincial Sales Tax省銷售稅

16.RCMP——Royal Canadian Mounted Police加拿大皇家騎警

17.RRSP——Registered Retirement Savings Plan注冊退休儲蓄計劃

18.WCB——Worker's Compensation Board工人賠償局

19.YMCA——Young Men's Christian Association基督教男青年會

20.YWCA——Young Women's Christian Association基督教女青年會

(以上縮寫的發音是逐個英文字母念)

(以下縮寫的發音是將縮寫字母拼讀)

21.CANN——Community Airport Newcomer's Network新移民社區適應及機場接待處

22.ICES——International Credential Evaluation Service國際文憑審核服務處

23.SAFER——Shelter Aid For Elderly Renters為老年租戶提供租金援助計劃

24.SIN——Social Insurance Number社會保險卡

星期
星期一:MONDAY=MON 星期二:TUESDAY=TUS
星期三:WENSEDAY=WEN 星期四:THURSDAY=THUR
星期五:FRIDAY=FRI 星期六:SATURDAY=SAT
星期天:SUNDAY=SUN

月份
一月份=JAN 二月份=FEB
三月份=MAR 四月份=APR
五月份=MAY 六月份=JUN
七月份=JUL 八月份=AUG
九月份=SEP 十月份=OCT
十一月份=NOV 十二月份=DEC

常用詞
4=FOR 到永遠=FOREVER
2=TO RTN=RETURN(送回)
BT=BLOOD TYPE(血型) PLS=PLEASE(請)
BD=BIRTHDAY(生日) REWARD=酬謝
REWARD 4 RETURN=送回有酬謝 ALLRG=過敏

軍事術語
USMC=海軍陸戰隊 NAVY=海軍
AF=AIR FORCE(空軍) ARMY=陸軍

宗教類
C=CHRISTIANISM(基督教) J=JUDAISM(猶太教)
C=CATHOLICISM(天主教) B=BUDDHISM(佛教)
I=ISLAM(伊斯蘭教) NR=NO REFERENCE(沒有宗教信仰)

星座
水瓶座: AQUARIUS(1月21日 - 2月19日)
雙魚座: PISCES(2月20日 - 3月20日 )
白羊座: ARIES (3月21日 - 4月20日 )
金牛座: TAURUS(4月21日 - 5月21日)
雙子座: GEMINI(5月22日 - 6月21日 )
巨蟹座: CANCER(6月22日 - 7月23日 )
獅子座: LEO(7月24日 - 8月23日)
處女座: VIRGO(8月24日 - 9月23日 )
天秤座: LIBRA (9月24日 - 10月23日 )
天蠍座: SCORPIUS(10月24日 - 11月22日 )
人馬座: SAGITTARIUS(11月23日 - 12月21日 )
山羊座: CAPRICORNUS (12月22日 - 1月20日 )
1. 國際性或全美性:

UNESCO (United Nations Ecational, Scientific and Cultural organization)聯合國教育科學文化組織(也叫國際文教組織)
例如: (The)UNESCO has made some contributions to the world.(UNESCO 對世界做出一些貢獻)

NATO(North Atlantic Treaty organization)北大西洋公約組織。
例如:Could(the)NATO members stick to their commitments?(NATO 的成員能堅守承擔義務嗎?)

SALT(Strategic Arms Limitation Treaty)戰略武器限制公約
例如:Should every nation join(the)SALT?(每個國家都要加入 SALT?)

NASA(National Aeronautics and Space Administration)美國航天太空總署
例句:The U.S. space programs depend on the performances of NASA.(美國的太空計畫是靠NASA的表現而定。)
(註:以上縮寫字也被人們當做一個字看待)

WHO(World Health organization)世界衛生組織
例句:Taiwan has been trying to become one of the WHO members.(台灣一直想辦法成為WHO的成員之一)

FBI(Federal Bureau of Investigation)聯邦調查局(負責美國境內)

CIA(Central Intelligence Agency)中央情報局(負責國外)
例句:Over the past years, Dr. and Mrs. Lee have worked for both FBI and CIA.(過去多年來李博士夫婦都為 FBI 和 CIA 工作)

FDA(Food and Drug Administration)美國食品葯物管理局
例句:This new drug has to be approved by the FDA.(這新葯要經 FDA 批准)

USDA(United States Department of Agriculture)美國農業部
例句:USDA supplies myriad of information on agriculture market.(有關農業市場,USDA 供應大量資料。)

IRS(Internal Revenue Service)美國稅務局
例句:Employees working for IRS should be courteous toward tax payers.(IRS 員工對納稅人應該有禮貌)

NAACP(National Association for the Advancement of Color People)(全國黑人權益促進會,即黑人為了增進權益的最大機構)
例句:Many African-Americans join NAACP.(許多美國黑人參加 NAACP)

NIH(National Institute of Health)
例句:Mr. Wang has worked at NIH as a researcher.(王先生在 NIH 擔任研究員)

AARP (American Association of Retired People.)(美國退休人員協會)
例句:At age 50, you are eligible to be a member of AARP.(如果你 50 歲就可以成為 AARP 的會員)

AAUP (American Association of University Professors) (美國大學教授協會)
例句:The AAUP has many branches at different colleges and universities in the U.S. (AAUP 在美國各大學有很多分會)

SCORE (Services Corps of Retired Executives)(退休主管服務隊)(這是美國企業界主管退休後,免費擔任顧問,協助年輕人創業的團體。)
(注意:corps 單復數一樣,發音與 corpse 不同,要小心。)
(註:老外在機構名稱縮寫字前面,有時加冠詞 the, a ,an,有時不加,不過在正式文件里,通常都加。)

2. 一般考試名稱:

SAT (Scholastic Aptitude Test) 學術能力傾向測驗 (就是美國為高中生想進大學而設的考試)
例句:The well-known universities accept new students based on SAT scores and well-rounded personalities. (名大學接受新生根據 SAT 成績及各方面優良的品德)

GPA (Grade Point Average)(學業成績總平均)
例句:His GPA always stands on the top of his class. (他的 GPA 都是全班第一)

GED (General Equivalent Diploma); 一般同等文憑(高中沒有畢業的學生,如果參加 GED,及格後,就可取得高中畢業證書)
例句:If he passes GED test, he will earn a high school diploma.

AP (advanced placement) 在校高中生,如果選修 AP 課程,考試及格,將來進大學時,可不必再修。
例句:His son took some AP courses at high school.

GMAT (Graate Management Admission Test) 美國為攻讀企管碩士 (MBA) 學生而設的入學考試
例句:In order to enter a MBA program, you need a high score on GMAT.

LSAT (Law School Admission Test) 美國為攻讀法律學生而設的入學考試
例句:He did very well in his LSAT. (他的 LSAT 考得不錯)

MCAT (Medical College Admission Test) 美國為進入醫學院學生而設的考試
例句:Do you think he will do well in his MCAT?

GRE (Graate Record Exam) 這是美國大學研究所對一般研究生的入學考試
例句:Most American graate schools require GRE scores.(多半美國研究所需要 GRE 成績)

TOEFL (Test of English as a Foreign Language) 外國學生想進美國大學的英語能力考試(即所謂:「托福」考試)
例句:Almost all Chinese college graates are required to take TOEFL if they come to the U.S. for advanced degrees. (幾乎所有的中國大學畢業生都要參加 TOEFL,假如他們要到美國取得高學位的話。)

CLEP(College Level Exam Program) 任何人只要有學識專長,都可參加這種考試,一旦及格,就可取得大學的學分。
例句:As long as you pass CLEP, You may earn college credits.(只要你通過 CLEP,就能獲得大學學分。)
(註:老外一般所謂「大學」只說 College,不說 University)

ESOL(English for Speakers of Other Languages) 這是美國為新來移民或外國學生所設的特別英語課程。也叫 ESL(English as a Second Language)
例句:Many American campuses offer ESOL courses for foreign students.(許多美國校園為外國學生開設 ESOL 課程)

3. 一般生活方面:

EOE (Equal Opportunity Employer) 這是美國各機構招考員工時向申請工作者表明自己是「平等機會僱主」。
例句:All African-Americans hope that their employments will be based on EOE.(所有美國黑人都希望他們的工作機會均等)

DOQ (Depending on Qualifications) 根據申請工作者的資歷決定是否僱用。
例句:The DOQ policy is being used by our school in hiring new teachers. (聘請新教師時,本校採用 DOQ 政策。)

PR (Public Relation) 公共關系
例句:The college president wants to improve its PR with the community.(大學校長想與社區增進公共關系)

CEO (Chief Executive Officer) 最高行政執行長 (多半指企業界或公司領導人)
例句:The CEO of this company will resign because of poor health. (這公司的 CEO 因為身體不好而辭職)

CPA (Certified Public Accountant) 美國有執照的會計師
例句:Do you have a CPA to prepare your income tax?(你有 CPA 為你報稅嗎?)

COLA (Cost of Living Adjustment) 生活費用的調整(即加薪時是按生活指數而定)
例句:Our annual pay raise will be based on COLA.

STD (Sexually Transmitted Disease) = VD = Venereal Disease 性病(現在 STD 較常用)
例句:Many teen-agers face STD problems.(許多青少年面臨 STD 問題)

SOA (Sexually oriented Advertisement) 有關性方面的廣告
例句:Don\'t you feel we have too much SOA in the media?(你不認為在媒體上有太多的 SOA 嗎?)

GOP (Grand Old Party) 美國共和黨另一稱呼 = Republican Party
例句:The GOP has nominated Mr. Bush as its Presidential candidate.(GOP 已提名 Bush 先生為總統候選人)

PMS (Pre-menstrual Syndrome) 這是女人在月經前不舒服或心情不好所常用的縮寫字
例句:Don\'t bother her; she has PMS.

ADHD (Attention Deficit Hyperactivity Disorder) 指青少年不能集中注意力,靜不下來的一種病症。
例句:Tens of thousands of youngsters are suffering from ADHD in the U.S. (在美國成千上萬的青少年有 ADHD 的毛病)

RSVP (Respondez sil vous plait) 這是法文,通常在請帖上使用的「敬請迴音」= Please reply(或 respond)
例句:There is「RSVP」on the invitation card.

BYOB (bring your own bottle) 老外請客時,為了減少負擔或個人愛好酒的品種,在請帖上註明「請自己帶酒」。
例句:Whenever he invites guests, he asks 「BYOB」。 (他只要請客,就要人家自己帶酒。)

AIDS (Acquired Immune Deficiency Sydrome) 愛滋病
例句:AIDS has spread all over the world.

CPR (Cardiopulmonary resuscitation) 心臟病急救法
例句:Everyone should learn how to do CPR.

EKG (Electrocardiography) 心電圖檢查 (不是 ECG)
例句:Her physician asks her to have an EKG next week. (醫生要她下周做 EKG)

IV (intravenous injection) 為病人注射的點滴
例句:In the hospital emergency room, I saw a patient with an IV on his arm. (在醫院大的急診病房裡,我看見一個病人在打點滴)

⑩ oracle資料庫中有哪些字元集,字元集之間的子集和超集關系是怎麼樣的

理解ORACLE資料庫字元集

一.引言

ORACLE資料庫字元集,即Oracle全球化支持(Globalization Support),或即國家語言支持(NLS)其作用是用本國語言和格式來存儲、處理和檢索數據。利用全球化支持,ORACLE為用戶提供自己熟悉的資料庫母語環境,諸如日期格式、數字格式和存儲序列等。Oracle可以支持多種語言及字元集,其中oracle8i支持48種語言、76個國家地域、229種字元集,而oracle9i則支持57種語言、88個國家地域、235種字元集。由於oracle字元集種類多,且在存儲、檢索、遷移oracle數據時多個環節與字元集的設置密切相關,因此在實際的應用中,資料庫開發和管理人員經常會遇到有關oracle字元集方面的問題。本文通過以下幾個方面闡述,對oracle字元集做簡要分析

二.字元集基本知識

2.1字元集
實質就是按照一定的字元編碼方案,對一組特定的符號,分別賦予不同數值編碼的集合。Oracle資料庫最早支持的編碼方案是US7ASCII。
Oracle 的字元集命名遵循以下命名規則 :

即: <語言><比特位數><編碼 >
比如: ZHS16GBK表示採用GBK編碼格式、16位(兩個位元組)簡體中文字元集

2.2字元編碼方案
2.2.1 單位元組編碼
(1)單位元組7位字元集,可以定義128個字元,最常用的字元集為 US7ASCII
(2)單位元組8位字元集,可以定義256個字元,適合於歐洲大部分國家
例如:WE8ISO8859P1(西歐、8位、ISO標准8859P1編碼 )
2.2.2 多位元組編碼
(1)變長多位元組編碼
某些字元用一個位元組表示,其它字元用兩個或多個字元表示,變長多位元組編碼常用於對亞洲語言的支持, 例如日語、漢語、印地語等
例如:AL32UTF8(其中AL代表ALL,指適用於所有語言)、 zhs16cgb231280
(2)定長多位元組編碼
每一個字元都使用固定長度位元組的編碼方案,目前oracle唯一支持的定長多位元組編碼是AF16UTF16,也是僅用於國家字元集
2.2.3 unicode 編碼
Unicode 是一個涵蓋了目前全世界使用的所有已知字元的單一編碼方案,也就是說Unicode為每一個字元提供唯一的編碼。UTF-16是unicode的16位編碼方式,是一種定長多位元組編碼,用2個位元組表示一個unicode字元,AF16UTF16是UTF-16編碼字元集。
UTF-8 是unicode的8位編碼方式,是一種變長多位元組編碼,這種編碼可以用1、2、3個位元組表示一個unicode字元,AL32UTF8,UTF8、UTFE是UTF-8編碼字元集

2.3 字元集超級
當一種字元集(字元集A)的編碼數值包含所有另一種字元集(字元集B)的編碼數值,並且兩種字元集相同編碼數值代表相同的字元時,則字元集A是字元集B的超級,或稱字元集B是字元集A的子集。
Oracle8i 和oracle9i官方文檔資料中備有子集-超級對照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由於US7ASCII是最早的Oracle資料庫編碼格式,因此有許多字元集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。

2.4 資料庫字元集(oracle伺服器端字元集)
資料庫字元集在創建資料庫時指定,在創建後通常不能更改。在創建資料庫時,可以指定字元集(CHARACTER SET)和國家字元集(NATIONAL CHARACTER SET)。
2.4.1 字元集
(1) 用來存儲CHAR, VARCHAR2, CLOB, LONG等類型數據
(2) 用來標示諸如表名、列名以及PL/SQL變數等
(3) 用來存儲SQL和PL/SQL程序單元等
2.4.2 國家字元集:
(1) 用以存儲NCHAR, NVARCHAR2, NCLOB等類型數據
(2) 國家字元集實質上是為oracle選擇的附加字元集,主要作用是為了增強oracle的字元處理能力,因為NCHAR數據類型可以提供對亞洲使用定長多位元組編碼的支持,而資料庫字元集則不能。國家字元集在oracle9i中進行了重新定義,只能在unicode編碼中的AF16UTF16和UTF8中選擇,默認值是 AF16UTF16
2.4.3查詢字元集參數
可以查詢以下數據字典或視圖查看字元集設置情況
nls_database_parameters 、props$、 v$nls_parameters
查詢結果中NLS_CHARACTERSET表示字元集,NLS_NCHAR_CHARACTERSET表示國家字元集
2.4.4 修改資料庫字元集
按照上文所說,資料庫字元集在創建後原則上不能更改。如果需要修改字元集,通常需要導出資料庫數據,重建資料庫,再導入資料庫數據的方式來轉換,或通過ALTER DATABASE CHARACTER SET語句修改字元集,但創建資料庫後修改字元集是有限制的,只有新的字元集是當前字元集的超集時才能修改資料庫字元集,例如UTF8是US7ASCII的超集,修改資料庫字元集可使用ALTER DATABASE CHARACTER SET UTF8。

2.5 客戶端字元集(NLS_LANG參數)
2.5.1 客戶端字元集含義
客戶端字元集定義了客戶端字元數據的編碼方式,任何發自或發往客戶端的字元數據均使用客戶端定義的字元集編碼,客戶端可以看作是能與資料庫直接連接的各種應用,例如sqlplus,exp/imp等。客戶端字元集是通過設置NLS_LANG參數來設定的。
2.5.2 NLS_LANG 參數格式
NLS_LANG=_.
Language: 顯示oracle消息,校驗,日期命名
Territory :指定默認日期、數字、貨幣等格式
Client character set :指定客戶端將使用的字元集
例如: NLS_LANG=AMERICAN_AMERICA.US7ASCII
AMERICAN是語言,AMERICA是地區,US7ASCII是客戶端字元集
2.5.3 客戶端字元集設置方法
1)UNIX 環境
$NLS_LANG=「simplified chinese」_china.zhs16gbk
$export NLS_LANG
編輯oracle用戶的profile文件
2)Windows 環境
編輯注冊表
Regedit.exe---HKEY_LOCAL_MACHINE---SOFTWARE---ORACLE—HOME0
2.5.4 NLS 參數查詢
Oracle 提供若干NLS參數定製資料庫和用戶機以適應本地格式,例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER等,可以通過查詢以下數據字典或v$視圖查看。
NLS_DATABASE_PARAMETERS-- 顯示資料庫當前NLS參數取值,包括資料庫字元集取值
NLS_SESSION_PARAMETERS-- 顯示由NLS_LANG 設置的參數,或經過alter session 改變後的參數值(不包括由NLS_LANG 設置的客戶端字元集)
NLS_INSTANCE_PARAMETE-- 顯示由參數文件init.ora 定義的參數V$NLS_PARAMETERS--顯示資料庫當前NLS參數取值
2.5.5 修改NLS參數
使用下列方法可以修改NLS參數
(1)修改實例啟動時使用的初始化參數文件
(2)修改環境變數 NLS_LANG
(3)使用ALTER SESSION語句,在oracle會話中修改
(4)使用某些SQL函數
NLS 作用優先順序別:Sql function>alter session>環境變數或注冊表>參數文件>資料庫默認參數

三.導入/導出與字元集轉換

3.1 EXP/IMP
Export 和 Import 是一對讀寫Oracle數據的工具。Export 將 Oracle 資料庫中的數據輸出到操作系統文件中, Import 把這些文件中的數據讀到Oracle 資料庫中,由於使用exp/imp進行數據遷移時,數據從源資料庫到目標資料庫的過程中有四個環節涉及到字元集,如果這四個環節的字元集不一致,將會發生字元集轉換。

EXP
____________ _________________ _____________
|imp導入文件|<-><->
------------ ----------------- -------------

IMP
____________ _________________ _____________
|imp導入文件|->|環境變數NLS_LANG|->|資料庫字元集|
------------ ----------------- -------------

四個字元集是
(1)源資料庫字元集
(2)Export過程中用戶會話字元集(通過NLS_LANG設定)
(3)Import過程中用戶會話字元集(通過NLS_LANG設定)
(4)目標資料庫字元集

3.2導出的轉換過程
在Export過程中,如果源資料庫字元集與Export用戶會話字元集不一致,會發生字元集轉換,並在導出文件的頭部幾個位元組中存儲Export用戶會話字元集的ID號。在這個轉換過程中可能發生數據的丟失。
例:如果源資料庫使用ZHS16GBK,而Export用戶會話字元集使用US7ASCII,由於ZHS16GBK是16位字元集,而US7ASCII是7位字元集,這個轉換過程中,中文字元在US7ASCII中不能夠找到對等的字元,所以所有中文字元都會丟失而變成「?? 」形式,這樣轉換後生成的Dmp文件已經發生了數據丟失。
因此如果想正確導出源資料庫數據,則Export過程中用戶會話字元集應等於源資料庫字元集或是源資料庫字元集的超集

3.3導入的轉換過程
(1)確定導出資料庫字元集環境
通過讀取導出文件頭,可以獲得導出文件的字元集設置
(2)確定導入session的字元集,即導入Session使用的NLS_LANG環境變數
(3)IMP讀取導出文件
讀取導出文件字元集ID,和導入進程的NLS_LANG進行比較
(4)如果導出文件字元集和導入Session字元集相同,那麼在這一步驟內就不需要轉換,如果不同,就需要把數據轉換為導入Session使用的字元集。可以看出,導入數據到資料庫過程中發生兩次字元集轉換
第一次:導入文件字元集與導入Session使用的字元集之間的轉換,如果這個轉換過程不能正確完成,Import向目標資料庫的導入過程也就不能完成。
第二次:導入Session字元集與資料庫字元集之間的轉換。
然而,oracle8i的這種轉換只能在單位元組字元集之間進行,oracle8i導入Session不支持多位元組字元集之間的轉換,因此為了避免第一次轉換,導入Session使用的NLS_LANG與導出文件字元集相同,第二次轉換(通過SQL*Net)支持任何兩種字元集。以上情況在Oracle9i中略有不同

四.亂碼問題

oracle在數據存儲、遷移過程中經常發生字元亂碼問題,歸根到底是由於字元集使用不當引起。下面以使用客戶端sqlplus向資料庫插入數據和導入/導出(EXP/IMP)過程為例,說明亂碼產生的原因。

4.1使用客戶端sqlplus向資料庫存儲數據
這個過程存在3個字元集設置
(1)客戶端應用字元集
(2)客戶端NLS_LANG參數設置
(3)伺服器端資料庫字元集(Character Set)設置
客戶端應用sqlplus中能夠顯示什麼樣的字元取決於客戶端操作系統語言環境(客戶端應用字元集),但在應用中錄入這些字元後,這些字元能否在資料庫中正常存儲,還與另外兩個字元集設置緊密相關,其中客戶端NLS_LANG參數主要用於字元數據傳輸過程中的轉換判斷。常見的亂碼大致有兩種情形:
(1)漢字變成問號「?」;
當從字元集A 轉換成字元集B時,如果轉換字元之間不存在對應關系,NLS_LANG使用替代字元「?」替代無法映射的字元
(2)漢字變成未知字元(雖然有些是漢字,但與原字元含義不同)
轉換存在對應關系,但字元集A 中的字元編碼與字元集B 中的字元編碼代表不同含義

4.2發生亂碼原因
亂碼產生是由於幾個字元集之間轉換不匹配造成,分以下幾種情況:
(註:字元集之間如果不存在子集、超集對應關系時的情況不予考慮,因為這種情況下字元集之間轉換必產生亂碼)
1)伺服器端資料庫字元集與客戶端應用字元集相同,與客戶端NLS_LANG參數設置不同
如果客戶端NLS_LANG字元集是其它兩種字元集的子集,轉換過程將出現亂碼。
解決方法:將三種字元集設置成同一字元集,或NLS_LANG字元集是其它兩種字元集的超集
2 )伺服器端資料庫字元集與客戶端NLS_LANG參數設置相同,與客戶端應用字元集不同
如果客戶端應用字元集是其它兩種字元集的超集時,轉換過程將出現亂碼,但對於單位元組編碼存儲中文問題,可參看本文第5章節的分析
3 )客戶端應用字元集、客戶端NLS_LANG參數設置、伺服器端資料庫字元集互不相同
此種情況較為復雜,但三種字元集之間只要有不能轉換的字元,則必產生亂碼

4.3導入/導出過程出現亂碼原因
這個過程存在4個字元集設置,在3.1章節中已分析
(1)源資料庫字元集
(2)EXP過程中NLS_LANG參數
(3)IMP過程中NLS_LANG參數
(4)目標資料庫字元集
出現亂碼原因
1 )當源資料庫字元集不等於EXP過程中NLS_LANG參數,且源資料庫字元集是EXP過程中NLS_LANG的子集,才能保證導出文件正確,其他情況則導出文件字元亂碼
2 )EXP過程中NLS_LANG字元集不等於IMP過程中NLS_LANG字元集,且EXP過程中NLS_LANG字元集是IMP過程中NLS_LANG字元集的子級, 才能保證第一次轉換正常,否則第一次轉換中出現亂碼。
3 )如果第一次轉換正常,IMP過程中NLS_LANG字元集是目標資料庫字元集的子集或相同,才能保證第二次轉換正常,否則則第二次轉換中出現亂碼

五.單位元組編碼存儲中文問題

由於歷史的原因,早期的oracle沒有中文字元集(如oracle6、oracle7、oracle7.1),但有的用戶從那時起就使用資料庫了,並用US7ASCII字元集存儲了中文,或是有的用戶在創建資料庫時,不考慮清楚,隨意選擇一個默認的字元集,如WE8ISO8859P1或US7ASCII,而這兩個字元集都沒有漢字編碼,雖然有些時候選用這種字元集好象也能正常使用,但用這種字元集存儲漢字信息從原則上說就是錯誤的,它會給資料庫的使用與維護帶來一系列的麻煩。
正常情況下,要將漢字存入資料庫,資料庫字元集必須支持中文,而將資料庫字元集設置為US7ASCII等單位元組字元集是不合適的。US7ASCII字元集只定義了128個符號,並不支持漢字。另外,如果在SQL*PLUS中能夠輸入中文,操作系統預設應該是支持中文的,但如果在NLS_LANG中的字元集設置為US7ASCII,顯然也是不正確的,它沒有反映客戶端的實際情況。但在實際應用中漢字顯示卻是正確的,這主要是因為Oracle檢查資料庫與客戶端的字元集設置是同樣的,那麼數據在客戶與資料庫之間的存取過程中將不發生任何轉換,但是這實際上導致了資料庫標識的字元集與實際存入的內容是不相符的。而在SELECT的過程中,Oracle同樣檢查發現資料庫與客戶端的字元集設置是相同的,所以它也將存入的內容原封不動地傳送到客戶端,而客戶端操作系統識別出這是漢字編碼所以能夠正確顯示。
在這個例子中,資料庫與客戶端都沒有設置成中文字元集,但卻能正常顯示中文,從應用的角度看好象沒問題。然而這裡面卻存在著極大的隱患,比如在應用length或substr等字元串函數時,就可能得到意外的結果。
對於早期使用US7ASCII字元集資料庫的數據遷移到oracle8i/9i中(使用zhs16gbk),由於原始數據已經按照US7ASCII格式存儲,對於這種情況,可以通過使用Oracle8i的導出工具,設置導出字元集為US7ASCII,導出後使用UltraEdit等工具打開dmp文件,修改第二、三字元,修改 0001 為0354,這樣就可以將US7ASCII字元集的數據正確導入到ZHS16GBK的資料庫中。

六.結束語

為了避免在資料庫遷移過程中由於字元集不同導致的數據損失,oracle提供了字元集掃描工具(character set scanner),通過這個工具我們可以測試在數據遷移過程中由於字元集轉換可能帶來的問題,然後根據測試結果,確定數據遷移過程中最佳字元集解決方案。

參考文獻
[1]Biju Thomas , Bob Bryla 《oracle9i DBA基礎I 學習指南》電子工業出版社 2002

熱點內容
二級緩存微服務 發布:2025-05-14 05:13:55 瀏覽:101
sqlserverwhencase 發布:2025-05-14 05:11:35 瀏覽:434
安卓odd是什麼意思 發布:2025-05-14 04:49:57 瀏覽:920
安卓哪個app能查詢航班 發布:2025-05-14 04:49:04 瀏覽:557
linux定時shell腳本 發布:2025-05-14 04:49:00 瀏覽:684
審計需要什麼配置 發布:2025-05-14 04:48:55 瀏覽:549
安卓軟體為什麼經常自啟動 發布:2025-05-14 04:38:17 瀏覽:159
譚浩強c語言第三版課後答案 發布:2025-05-14 04:37:31 瀏覽:60
san存儲和nas存儲 發布:2025-05-14 04:34:44 瀏覽:152
幽靈戰士3什麼配置 發布:2025-05-14 04:33:53 瀏覽:114