《Oracle大型資料庫在AIX UNIX上的實戰詳解》答疑九 資料庫字符集

wenpingblog發表於2010-01-04

陸續收到若干同行來郵件,討論關於資料庫字符集和國家語言字符集之間的關係。這裡我提出自己的看法。本文後面的內容部分來自網上關於Sybase ASE的一篇技術文摘,但下載日久,難分誰之作品,這裡借用一下,如果正好是您的,您來信告訴我,我轉告大家!

該文為Sybase ASE所作,但對於Oracle道理相同,值得借鑑!

1:什麼是字符集?
字符集是字元(包含字母,數字,符號和非列印字元等)以及所指定的內碼所組成的特定的集合。通常一個字符集包含一個字母表中的字元,例如拉丁字母表被使用在英語語言中,那麼如果要使用拉丁字元,就要配置使用英語語言集中的特定的字符集合――拉丁語言字符集。這裡為什麼特指了是英語語言集呢?因為字符集是基於某種作業系統平臺和某種語言集支援的。語言集的集合被稱為語言組,它可能包含一種或多種語言。本地字符集是基於特定語言組中所包含的一種或多種語言支援的,在特定作業系統平臺上編碼的集合。

在Client/Server系統中,支援多語言的資料處理,但是所有的語言必須屬於同一個語言組。例如,從下表可以看出,如果伺服器中的資料用組1中的字符集,則同一資料庫中可以有法語,德語,英語以及該組中的其它語言。而在這個資料庫中就不能同時儲存日語,法語了。

這裡請注意一個非常特別的字符集—Unicode—它支援世界上超過650種語言的國際字符集。Unicode允許在同一伺服器上混合使用不同語言組的不同語言。

2:字符集和排序順序的關係?


每種字符集都有一種或多種排序順序,Adaptive Server(包括Oracle)使用它們儲存資料。排序順序與特定的語言或語言組及特定的字符集聯絡密切,不同的語言對同樣字元的排序是不同的,因此,需要特定語言的排序順序,以便正確地對字元進行排序。

二進位制排序順序:對於所有字符集都至少提供一個二進位制排序順序,這一排序順序基於字符集中分配給代表每個字元的程式碼(“二進位制”程式碼)的算數值,適用於每個字符集的前128個字元和亞洲語言。當字符集支援一種以上的語言時,二進位制排序順序將會得出不正確的結果,這時就應該選擇其它排序順序了。

字典排序,區分大小寫,區分重音:分別對大寫和小寫字母進行排序。字典排序順序識別字母的各種重音形式,並將它們排在相關聯的非重音字母之後。

字典排序,不區分大小寫,區分重音:按字典順序排序,大寫字母與小寫字母等同,在排序結果中大小寫字母混合使用。對於避免表中名稱的重複條目很有用。

字典排序,不區分大小寫,區分重音,具有優先順序:在排序時不區分大小寫,在所有其它條件相同時,大寫字母具有高的優先順序(即大寫字母先出現)。

字典排序,不區分大小寫,不區分重音:將加重音格的字母與未加重音格的相關聯字母同等對待,它在排序中混合了重音字元。

3:什麼是字符集轉換(Oracle的國家語言字符集)?

為保持客戶端與伺服器之間的資料完整性,資料必須在字符集之間進行轉換,目的是跨機器和字符集使用時,確保“a”還是“a”,此過程就是字符集轉換。 Oracle NLS就是如何執行轉換的方式和指定。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22363020/viewspace-624266/,如需轉載,請註明出處,否則將追究法律責任。

相關文章