說明在 SQL Server 中儲存 UTF-8 資料

文章翻譯 文章翻譯
文章編號: 232580 - 檢視此文章適用的產品。
本文曾發行於 CHT232580
全部展開 | 全部摺疊

結論

某些應用程式 (特別是 Web 應用程式) 必須處理以 UTF-8 編碼方法所編碼的 Unicode 資料。SQL Server 7.0 和 SQL Server 2000 使用不同的 Unicode 編碼方式 (UCS-2),無法將 UTF-8 識別為有效的字元資料。本文說明處理這種情況時可以使用的一些選項。

其他相關資訊

Unicode 資料可以用許多不同的方式進行編碼。UCS-2 及 UTF-8 是兩種常用來儲存位元模式的 Unicode 字元表示方式。Microsoft Windows NT、SQL Server、Java、COM 和 SQL Server ODBC 驅動程式以及 OLEDB 提供者在內部都以 UCS-2 代表 Unicode 資料。

使用 SQL Server 7.0 或 SQL Server 2000 做為應用程式後端伺服器,以傳送及接收由 UTF-8 所編碼的 Unicode 資料的選項包括:
  1. 如果應用程式使用 Active Server Pages (ASP),並且您使用 Internet Information Server (IIS) 5.0 及 Microsoft Windows 2000,則可以將 <% Session.Codepage=65001 %> 新增到伺服器端的 ASP 指令碼中。這會指示 IIS 在傳送字串到用戶端之前,對所有從 UCS-2 到 UTF-8 動態產生的字串 (例如:Response.Write) 進行自動轉換。

    如果您不想要啟用工作階段,可以改用伺服器端指示詞 <%@ CodePage=65001 %>。

    任何透過 GET 或 POST 從用戶端傳送到伺服器的 UTF-8 資料,也會自動轉換為 UCS-2。Session.Codepage 屬性是我們建議在 Web 應用程式中用來處理 UTF-8 資料的方法。IIS 4.0 及 Windows NT 4.0 並未提供此 Codepage 設定。如需詳細資訊,請參閱「Microsoft 知識庫」中的下列文件:
    254313 PRB:Error Message: Active Server Pages Error 'ASP 0203' Invalid Code Page
  2. 在應用程式中進行 UCS-2 或 UTF-8 之間的相互轉譯是適當的方式。此種轉換的範例程式碼可以在 Unicode Consortium 網站中找到:

    http://www.unicode.org/Public/PROGRAMS/CVTUTF
    關於將 UCS-2 轉換為 UTF-8 之演算法的高階說明,可以在 Internet Request For Comments 文件 RFC2279 中找到。

    在 Windows NT 或 Windows 2000 上,您可以使用 Win32 函式 MultiByteToWideCharWideCharToMultiByte,將常數 CP_UTF8 (65001) 當做函式的第一個參數來傳遞,藉以將 UTF-8 轉換為 UCS-2 或從 UCS-2 轉換為 UTF-8。
  3. 將應用程式修改為使用 UCS-2 編碼,替代原先的 UTF-8 編碼。
  4. 使用 BINARY/VARBINARY/IMAGE 資料行,將真正的 UTF-8 資料儲存在伺服器上。在 SQL Server 上儲存 UTF-8 資料代表您不能像有效字元資料般使用 SQL Server 來排序或尋找這些值的範圍。在包含 UTF-8 資料的資料行上,無法傳回預期結果的作業類型包括了 ORDER BY,greater-than「>」和 less-than「<」比較,及內建的 SQL Server 字串操作函式,例如 SUBSTRING()。

    但等於「=」比較卻仍可運作,只要被比較的字串相當於是位元組層級。請注意,如果您在 SQL Server 中儲存 UTF-8 資料,就不應該使用字元資料行 (CHAR/NCHAR/VARCHAR 等等)。UTF-8 對 SQL Server 而言並不是有效的字元資料,並且在字元資料行中儲存非字元資料,可能會發生問題,例如下列「Microsoft 知識庫」文件所討論的問題:
    155723 INF:SQL Server 截斷 DBCS 字串
    234748 PRB:SQL Server ODBC 驅動程式將語言事件轉換為 Unicode
    請注意,考慮這個選項時,如果您需要經常在 Web 瀏覽器之外的任何應用程式存取儲存在 SQL Server 中的 UTF-8 資料 (例如非 Web 的 ODBC 應用程式),便需要在此應用程式中將 UTF-8 轉換為 UCS-2,因為 ODBC、OLEDB、COM、Win32 API 呼叫、VB 和 C 執行階段字串操作函式無法使用 UTF-8 資料。這會將轉譯的負擔轉移到其他應用程式。
  5. 如果您不需要儲存單一字碼頁無法滿足的多種語言組合資料,則可能不需要使用 Unicode。
SQL Server 從 SQL Server 7.0 開始引進 Unicode 支援。因為 SQL Server 6.5 不支援儲存 Unicode 資料,所以 SQL Server 6.5 的唯一選項就是步驟 4 和步驟 5 所述的內容。

屬性

文章編號: 232580 - 上次校閱: 2006年2月20日 - 版次: 4.1
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Workgroup Edition
關鍵字:?
kbinfo KB232580
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com