SQL Server 2005 中的 Unicode 支持
Jun 07, 2016 pm 03:04 PMUnicode 支持 是 SQL Server 2005 中多語言 支持 的基
Unicode 支持是 SQL Server 2005 中多語言支持的基礎(chǔ)。Unicode 是由 Unicode Consortium(一個提倡為所有語言使用單一字符集的組織)創(chuàng)立的一項標(biāo)準(zhǔn)。SQL Server 2005 支持 Unicode 標(biāo)準(zhǔn) 3.2 版。Unicode 標(biāo)準(zhǔn)的 3.01 版與 ISO-10646(一項與 Unicode 中的所有碼位均相符的國際標(biāo)準(zhǔn))完全相同。
Unicode 的工作方式是,為每個字符提供一個唯一的碼位,該碼位與平臺、程序或語言無關(guān)。支持 Unicode 的程序可以處理任何語言的數(shù)據(jù)。因為其設(shè)計宗旨是涵蓋世界上所有語言的所有字符,所以不需要讓不同的代碼頁來處理不同的字符集。
因為所有 Unicode 系統(tǒng)都統(tǒng)一使用相同的位模式來表示所有字符,所以從一個系統(tǒng)轉(zhuǎn)到另一個系統(tǒng)時,不會出現(xiàn)字符轉(zhuǎn)換不正確的問題。
管理國際數(shù)據(jù)庫中的字符數(shù)據(jù)的最簡單方法是始終使用 Unicode nchar、nvarchar 和 nvarchar(max) 數(shù)據(jù)類型,而不使用它們對應(yīng)的非 Unicode 數(shù)據(jù)類型:char、varchar 和 text。這樣,客戶端與所有其他客戶端所看到的數(shù)據(jù)中的字符將是相同的。如果所有使用國際數(shù)據(jù)庫的應(yīng)用程序還使用 Unicode 變量來代替非 Unicode 變量,則不需要在系統(tǒng)中的任何位置執(zhí)行字符轉(zhuǎn)換。
注意 未來版本的 Microsoft SQL Server 中將刪除 ntext 數(shù)據(jù)類型。
Unicode 碼位及它們所代表的字符與用于可視呈現(xiàn)的“字形”是分開的。ISO 標(biāo)準(zhǔn) (ISO/IEC 9541-1) 將字形定義為“與具體設(shè)計無關(guān)的可識別抽象圖形符號”。因此,一個字符不必總是由相同的字形乃至唯一的字形來表示。所選擇的字體決定將使用什么字形來表示特定碼位或一系列碼位。
有關(guān)詳細(xì)信息,請參閱 Unicode Consortium 網(wǎng)站。
編碼
Unicode 將碼位映射到字符,但實際上并不指定數(shù)據(jù)在內(nèi)存、數(shù)據(jù)庫或網(wǎng)頁中的表示方式。這便是 Unicode 數(shù)據(jù)編碼發(fā)揮作用的地方。有許多不同的 Unicode 編碼。多半選擇一種 Unicode 數(shù)據(jù)類型即可,不必為這些細(xì)節(jié)操心;不過,在以下情況下了解編碼有重要意義:
?應(yīng)對可能以不同方式對 Unicode 進(jìn)行編碼的應(yīng)用程序時
?向其他平臺(非 Microsoft Windows)或 Web 服務(wù)器發(fā)送數(shù)據(jù)時
?導(dǎo)入其他編碼的數(shù)據(jù)或?qū)?shù)據(jù)導(dǎo)出為其他編碼時
Unicode 標(biāo)準(zhǔn)定義了其單一字符集的多種編碼:UTF-7、UTF-8、UTF-16 和 UTF-32。本部分對這些常見的編碼進(jìn)行說明:
?UCS-2
?UTF-16
?UTF-8
SQL Server 通常以 UCS-2 編碼方案存儲 Unicode。不過,許多客戶端以另一種編碼方案(如 UTF-8)來處理 Unicode。這種情況在基于 Web 的應(yīng)用程序中經(jīng)常出現(xiàn)。在 Microsoft Visual Basic 應(yīng)用程序中,字符串以 UCS-2 編碼方案來處理。因此,不需要顯式地指定 Visual Basic 應(yīng)用程序與 SQL Server 實例之間的編碼方案轉(zhuǎn)換。
SQL Server 2005 使用 Unicode (UTF-16) 來對 XML 數(shù)據(jù)進(jìn)行編碼。類型為 xml 的列中的數(shù)據(jù)以內(nèi)部格式存儲為二進(jìn)制大型對象 (BLOB),以支持 XML 模型特征,如文檔順序和遞歸結(jié)構(gòu)。因此,從服務(wù)器檢索的 XML 數(shù)據(jù)會以 UTF-16 格式輸出;如果想要為檢索的數(shù)據(jù)使用其他編碼,則應(yīng)用程序必須對所檢索的 UTF-16 數(shù)據(jù)執(zhí)行必要的轉(zhuǎn)換。《SQL Server 2005 聯(lián)機(jī)叢書》中的 XML 最佳實踐提供了如何為從 varchar(max) 列中檢索的 XML 數(shù)據(jù)顯式地聲明編碼的示例。
使用 UTF-16 編碼是因為它可以處理 2 字節(jié)或 4 字節(jié)字符,并且處理是依照面向字節(jié)的協(xié)議進(jìn)行的。這些特性使得 UTF-16 非常適合于遍歷使用不同編碼和字節(jié)排序系統(tǒng)的不同計算機(jī)。因為 XML 數(shù)據(jù)通常在網(wǎng)絡(luò)上得到廣泛共享,所以在數(shù)據(jù)庫中及在將 XML 數(shù)據(jù)導(dǎo)出到客戶端時保持默認(rèn)的 UTF-16 存儲格式是有意義的。
UCS-2
UCS-2 是 UTF-16 的前身。UCS-2 與 UTF-16 的不同之處是,UCS-2 是一種固定長度編碼,它以 16 位值(2 個字節(jié))表示所有字符,因此不支持補(bǔ)充字符。UCS-2 常與 UTF-16 發(fā)生混淆,UTF-16 用于在內(nèi)部表示 Microsoft Windows 操作系統(tǒng)(Windows NT、Windows 2000、Windows XP 和 Windows CE)中的文本,但 UCS-2 受到的限制更多。
注意 有關(guān)在 Windows 操作系統(tǒng)中使用 Unicode 的最新信息,請參閱 Microsoft Developer Network (MSDN) 庫中的 Unicode。建議 Windows 應(yīng)用程序在內(nèi)部使用 UTF-16,僅在必須使用其他格式時再通過接口作為“薄層”的一部分進(jìn)行轉(zhuǎn)換。
在 Microsoft SQL Server 2000 和 Microsoft SQL Server 2005 中以 Unicode 存儲的信息使用 UCS-2 編碼,無論使用的是哪個字符,該編碼都將每個字符存儲為兩個字節(jié)。因此,對拉丁語字母“A”的處理方式與對西里爾文字母 Sha ())、希伯來語字母 Lamed (ì)、泰米爾語字母 Rra (?) 或日語平假名字母 E (?|) 的處理方式是相同的。每個字母都有一個唯一的碼位(對于上述字母,碼位分別為 U+0041、U+0248、U+05DC、U+0BB1 和 U+3048,每個四位十六進(jìn)制數(shù)表示 UCS-2 使用的那兩個字節(jié))。
因為 UCS-2 只考慮了 65,536 個不同碼位的編碼,其本身無法處理補(bǔ)充字符,只能將補(bǔ)充字符視為未定義的 Unicode 代理項字符,這些字符組對后定義補(bǔ)充字符。不過,SQL Server 可以存儲補(bǔ)充字符而不會有字符丟失或損壞的風(fēng)險。通過創(chuàng)建自定義 CLR 函數(shù),可以擴(kuò)展 SQL Server 處理代理項對的能力。有關(guān)處理代理項對和補(bǔ)充字符的詳細(xì)信息,請參閱本文后面的“補(bǔ)充字符和代理項對”部分。
注意 補(bǔ)充字符定義為“具有補(bǔ)充碼位的 Unicode 編碼字符”。補(bǔ)充碼位的范圍在 U+10000 和 U+10FFFF 之間。
UTF-8
UTF-8 是一種旨在以與計算機(jī)上的字節(jié)排序無關(guān)的方式來處理 Unicode 數(shù)據(jù)的編碼方案。在處理 ASCII 及其他要求使用 8 位編碼的面向字節(jié)的系統(tǒng)(例如,必須覆蓋大量使用不同編碼、不同字節(jié)順序和不同語言的計算機(jī)的郵件服務(wù)器)時,UTF-8 會有幫助。盡管 SQL Server 2005 不以 UTF-8 格式存儲數(shù)據(jù),但它仍支持使用 UTF-8 來處理可擴(kuò)展標(biāo)記語言 (XML) 數(shù)據(jù)。有關(guān)詳細(xì)信息,請參閱本文的 SQL Server 2005 中的 XML 支持部分。
其他數(shù)據(jù)庫系統(tǒng)(例如,Oracle 和 Sybase SQL Server)通過使用 UTF-8 存儲來支持 Unicode。視服務(wù)器的實現(xiàn)方式而定,從技術(shù)上講實現(xiàn)數(shù)據(jù)庫引擎可能比較容易,因為服務(wù)器上的現(xiàn)有文本管理代碼在一次處理一個字節(jié)的數(shù)據(jù)時并不要求進(jìn)行重大更改。不過,在 Windows 環(huán)境中,UTF-8 存儲有幾個缺點(diǎn):
?組件對象模型 (COM) 僅在其 API 和接口中支持 UTF-16/UCS-2。因此,如果數(shù)據(jù)以 UTF-8 格式存儲,必須始終進(jìn)行轉(zhuǎn)換。僅在使用 COM 時會出現(xiàn)此問題;SQL Server 數(shù)據(jù)庫引擎通常不會調(diào)用 COM 接口。
?Windows XP 和 Windows Server 2003 的內(nèi)核均采用 Unicode。UTF-16 是 Windows 2000、Windows XP 和 Windows Server 2003 的標(biāo)準(zhǔn)編碼。不過,Windows 2000、Windows XP 和 Windows Server 2003 都可以識別 UTF-8。因此,在數(shù)據(jù)庫中使用 UTF-8 存儲格式需要進(jìn)行許多額外的轉(zhuǎn)換。通常,轉(zhuǎn)換所需的額外資源不會影響 SQL Server 數(shù)據(jù)庫引擎,但可能會影響許多客戶端操作。
?執(zhí)行許多字符串操作時,UTF-8 的速度可能都會較慢。排序、比較及幾乎任何字符串操作的速度可能都會下降,因為字符的寬度不固定。
?UTF-8 往往需要 2 個以上的字節(jié),并且增加的大小會占用更多的磁盤和內(nèi)存空間。
盡管有這些缺點(diǎn),但考慮到 XML 已成為一項重要的 Internet 通信標(biāo)準(zhǔn)這一事實,您可能希望考慮將默認(rèn)編碼設(shè)置為 UTF-8。

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

HQL和SQL在Hibernate框架中進(jìn)行比較:HQL(1.物件導(dǎo)向語法,2.資料庫無關(guān)的查詢,3.類型安全),而SQL直接操作資料庫(1.與資料庫無關(guān)的標(biāo)準(zhǔn),2.可執(zhí)行複雜查詢和資料操作)。

Oracle和DB2是兩個常用的關(guān)聯(lián)式資料庫管理系統(tǒng),它們都有自己獨(dú)特的SQL語法和特性。本文將針對Oracle和DB2的SQL語法進(jìn)行比較與區(qū)別,並提供具體的程式碼範(fàn)例。資料庫連接在Oracle中,使用以下語句連接資料庫:CONNECTusername/password@database而在DB2中,連接資料庫的語句如下:CONNECTTOdataba

MySQL連線數(shù)對資料庫效能的影響分析隨著網(wǎng)路應(yīng)用的不斷發(fā)展,資料庫成為了支援應(yīng)用系統(tǒng)重要的資料儲存和管理工具。在資料庫系統(tǒng)中,連線數(shù)是一個重要的概念,它直接關(guān)係到資料庫系統(tǒng)的效能和穩(wěn)定性。本文將從MySQL資料庫的角度出發(fā),探討連線數(shù)對資料庫效能的影響,並透過具體的程式碼範(fàn)例進(jìn)行分析。一、連線數(shù)是什麼?連線數(shù)指的是資料庫系統(tǒng)同時支援的客戶端連線數(shù),也可以理

C++軟體如何實現(xiàn)中文語言支援?隨著全球化的進(jìn)程,越來越多的軟體需要支援多語言,其中包括中文。在C++開發(fā)中,實作中文語言支援並不複雜,只需要一些基本的技巧和工具就可以輕鬆完成。本文將介紹如何在C++軟體中實現(xiàn)中文語言支持,並提供具體的程式碼範(fàn)例。 1.使用Unicode編碼為了支援中文,首先要確保軟體內(nèi)部使用的是Unicode編碼。 Unicode是一種標(biāo)準(zhǔn)的

SQL用於與MySQL數(shù)據(jù)庫交互,實現(xiàn)數(shù)據(jù)的增、刪、改、查及數(shù)據(jù)庫設(shè)計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進(jìn)行數(shù)據(jù)操作;2)使用CREATE、ALTER、DROP語句進(jìn)行數(shù)據(jù)庫設(shè)計和管理;3)複雜查詢和數(shù)據(jù)分析通過SQL實現(xiàn),提升業(yè)務(wù)決策效率。

作為數(shù)據(jù)專業(yè)人員,您需要處理來自各種來源的大量數(shù)據(jù)。這可能會給數(shù)據(jù)管理和分析帶來挑戰(zhàn)。幸運(yùn)的是,兩項 AWS 服務(wù)可以提供幫助:AWS Glue 和 Amazon Athena。

MySQL和SQL是開發(fā)者必備技能。 1.MySQL是開源的關(guān)係型數(shù)據(jù)庫管理系統(tǒng),SQL是用於管理和操作數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。 2.MySQL通過高效的數(shù)據(jù)存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數(shù)據(jù)操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優(yōu)化。 5.性能優(yōu)化技巧包括使用索引、避免全表掃描、優(yōu)化JOIN操作和提升代碼可讀性。

Go語言中SQL的基本概念及用法解析SQL(StructuredQueryLanguage)是一種專門用來管理和操作關(guān)聯(lián)式資料庫的語言。在Go語言中,我們通常使用SQL來執(zhí)行資料庫操作,例如查詢資料、插入資料、更新資料和刪除資料等。本文將介紹Go語言中SQL的基本概念及用法,並附帶具體的程式碼範(fàn)例。 1.連接資料庫在Go語言中,我們可以使用第三方函式庫來連接數(shù)據(jù)
